package com.zkk.functions;
public interface Function<Result,Param> {
Result function(Param... params);
}
</pre><pre code_snippet_id="1936299" snippet_file_name="blog_20161018_3_61644" name="code" class="java"><pre name="code" class="java">package com.zkk.observable;
import java.util.Set;
public interface ObservableIterface<T,P,R> {
/**
* 根据名称注册观察者
* @param name
* @param observer
*/
void registerObserver(String name,T observer);
/**
* 根据名称反注册观察者
* @param name
*/
void removeObserver(String name);
/**
* 根据观察者反注册
* @param observer
*/
void removeObserver(T observer);
/**
* 根据名称和观察者反注册
*
*/
void removeObserver(String name,T observer);
/**
* 根据名称获取观察者
* @param name
* @return
*/
Set<T> getObserver(String name);
/**
* 清除观察者
*/
void clear();
/**
* 通知观察者
* @param name
* @param p
* @return
*/
R notify(String name,P... p);
}
package com.kira.com.utils;
import com.kira.com.listener.Function;
import com.kira.com.listener.ObservableIterface;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Administrator on 2016/11/22 0022.
*/
public class ObservableManager<Param,Result>
implements ObservableIterface<Function, Param, Result> {
private static final String TAG = "zhouke";
private HashMap<String,Set<Function>> _mapping;
private final Object _lockObj = new Object();
private static ObservableManager _instance;
public ObservableManager(){
this._mapping = new HashMap<String,Set<Function>>();
}
public static synchronized ObservableManager newInstance(){
if(_instance == null){
_instance = new ObservableManager();
}
return _instance;
}
@Override
public void registerObserver(String name, Function observer) {
synchronized (_lockObj) {
Set<Function> observers;
if(!_mapping.containsKey(name)){
observers = new HashSet<>();
_mapping.put(name, observers);
}else{
observers = _mapping.get(name);
}
observers.add(observer);
}
}
@Override
public void removeObserver(String name) {
synchronized(_lockObj){
_mapping.remove(name);
}
}
@Override
public void removeObserver(Function observer) {
synchronized(_lockObj){
for (String key : _mapping.keySet()) {
Set<Function> observers= _mapping.get(key);
observers.remove(observer);
}
}
}
@Override
public void removeObserver(String name, Function observer) {
synchronized (_lockObj) {
if(_mapping.containsKey(name)){
Set<Function> observers = _mapping.get(name);
observers.remove(observer);
_mapping.remove(name);
}
}
}
@Override
public Set<Function> getObserver(String name) {
Set<Function> observers = null;
synchronized(_lockObj){
if(_mapping.containsKey(name)){
observers = _mapping.get(name);
}
}
return observers;
}
@Override
public void clear() {
synchronized(_lockObj){
_mapping.clear();
}
}
@Override
public Result notify(String name, Param... p) {
synchronized (_lockObj) {
if(_mapping.containsKey(name)){
Set<Function> observers = _mapping.get(name);
for(Function o: observers){
return (Result)o.function(p);
}
}
}
return null;
}
public boolean isConstain(String key){
synchronized (_lockObj) {
if(_mapping!=null){
return _mapping.containsKey(key);
}
}
return false;
}
}
可以用于activity与fragment 通信