观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
简单代码实现
public interface Observer {
public void update(String message);
}
public class Observable implements Observer {
private String name;
public Observable(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + "-" + message);
}
}
核心接口,用于添加和删除订阅者,同时向订阅者发送消息。
public interface Subject {
/**
* 增加订阅者
* @param observer
*/
public void attach(Observer observer);
/**
* 删除订阅者
* @param observer
*/
public void detach(Observer observer);
/**
* 通知订阅者更新消息
*/
public void notify(String message);
}
维护一个Observer列表
public class SubscriptionSubject implements Subject {
private List<Observer> list = new ArrayList<Observer>();
@Override
public void attach(Observer observer) {
list.add(observer);
}
@Override
public void detach(Observer observer) {
list.remove(observer);
}
@Override
public void notify(String message) {
for (Observer observer : list) {
observer.update(message);
}
}
}
public class Client {
public static void main(String[] args) {
SubscriptionSubject mSubscriptionSubject=new SubscriptionSubject();
Observable observable1=new Observable("xxx");
Observable observable2=new Observable("ooo");
mSubscriptionSubject.attach(observable1);
mSubscriptionSubject.attach(observable2);
mSubscriptionSubject.notify("updated!!!");
}
}