- 什么是观察者模式
观察者模式有叫做发布订阅模式,是对象间一种一对多的依赖关系,是的每当一个对象改变状态时,则所有依赖于他的对象都会得到通知并自动更新。这其中过程就好比订阅微信公众号,公众号中若有新消息产生就会及时通知用户并更新。
抽象观察者
public interface Observer { public void update(String message); }
具体观察者(ConcrereObserver)
public class WeixinUser implements Observer { // 微信用户名 private String name; public WeixinUser(String name) { this.name = name; } @Override public void update(String message) { System.out.println(name + "-" + message); } }
抽象被观察者(Subject)
public interface Subject {
/**
* 增加订阅者
* @param observer
*/
public void attach(Observer observer);
/**
* 删除订阅者
* @param observer
*/
public void detach(Observer observer);
/**
* 通知订阅者更新消息
*/
public void notify(String message);
}
具体被观察者(ConcreteSubject)
public class SubscriptionSubject implements Subject { private List<Observer> weixinUserlist = new ArrayList<Observer>(); @Override public void attach(Observer observer) { weixinUserlist.add(observer); } @Override public void detach(Observer observer) { weixinUserlist.remove(observer); } @Override public void notify(String message) { for (Observer observer : weixinUserlist) { observer.update(message); } } }
- 观察者模式优点与缺点
优点:
1.观察者与被观察者之间抽象耦合,易拓展
2.简历一套出发机制,单一职责
- 使用场景
1.时间多级触发(一对多)
2.信息交换跨系统场景(qmq)