设计模式【05】——观察者模式

    技术2022-07-10  142

    一、观察者模式定义

    对象之间的一对多依赖当一个对象改变状态时,所有依赖者都会收到通知并更新可参考:报纸订阅服务,出版者和订阅者之间即为观察者模式

    二、实现

    所有对象都要实现一个update()方法

     

    三、松耦合的优点

    主题唯一依赖的是一个实现Observer接口的对象列表,所以可以随时增加删除观察者,主题不受影响可以独立地复用主题或观察者,系统更具有弹性 /** * @name: Sbuject.class * @Author : * @create : * @Desc: 被观察者,有更新自动发送通知 */ public class Sbuject { private List<Observer> observers = new ArrayList<Observer>(); private int state; //状态 public int getState(){ return state; } public void setState(int state){ this.state = state; notifyAllObservers(); } //添加观察 public void attach(Observer observer){ observers.add(observer); } //移除观察 public void remove(){ observers.remove(observers.size()-1); } public void notifyAllObservers(){ for(Observer observer:observers){ observer.update(); } } } /** * @name: Observer.class * @Author : cicada * @create : * @Desc: 观察者 */ public abstract class Observer { protected Sbuject subject; public abstract void update(); } public class TrueObserver extends Observer { public TrueObserver(Sbuject subject) { this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println("-----观察者1号就位"+this.subject.getState()); } } public class Test { public static void main(String[] args) { Sbuject sbuject = new Sbuject(); new TrueObserver(sbuject); sbuject.setState(18); } }

     

    Processed: 0.012, SQL: 9