观察者模式
当对象间存在一对多关系时。
比如:当一个对象被修改时,则会自动通知它的依赖对象。
/**
* Created by malei on 2016/12/6.
*/
public class EventBus implements Subject{
//观察者集合,用于管理所有的观察
List<Observer> mList = new ArrayList<>();
@Override
public void addObserver(Observer observer) {
if (observer == null) {
throw new NullPointerException("observer == null");
}
if (!mList.contains(observer)) {
mList.add(observer);
}
}
@Override
public void removeObserver(Observer observer) {
mList.remove(observer);
}
@Override
public void notifyAllObserver(Object data) {
for (Observer observer : mList) {
observer.update(this, data);
}
}
public static void main(String[] args){
EventBus bus = new EventBus();
bus.addObserver(new ObserverOne());
bus.addObserver(new ObserverTwo());
bus.notifyAllObserver("大家好");
}
}
/**
* Created by malei on 2016/12/6.
* 抽象主题,被观察者
* 事件源接口
*/
public interface Subject {
//添加观察者
void addObserver(Observer observer);
//移除指定的观察者
void removeObserver(Observer observer);
//通知所有观察者
void notifyAllObserver(Object data);
}
/**
* Created by malei on 2016/12/6.
*/
public class ObserverOne implements Observer{
@Override
public void update(Subject subject, Object data) {
Log.show("ObserverOne得到了通知"+ ((String )data).toString());
}
}
/**
* Created by malei on 2016/12/6.
*/
public class ObserverTwo implements Observer{
@Override
public void update(Subject subject, Object data) {
Log.show("ObserverTwo得到了通知"+ ((String )data).toString());
}
}
/**
* Created by malei on 2016/12/6.
* 观察者接口
*/
public interface Observer {
void update(Subject subject,Object data);
}
网友评论