首页 > 代码库 > 观察者模式

观察者模式

观察者模式

1.观察者模式可以打个简单比方如:

  大家看报纸,定了商报。商报是subject而订阅者是observer,当商报有新的消息的时候就出版报纸给订阅者来让他们获取消息。

  也就是:定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

2.UML图

3.代码说明:

  

  Subject(主题接口):

1 public interface Subject {2     // 添加观察者3     public void attach(Observer observer);4 5     // 移除观察擦着6     public void detach(Observer observer);7 8     void notifyObservers();9 }

  Observer(观察者接口):

1 public interface Observer {2     3     void update();4     5 }

  ConcreteObserver1(观察者实例1)

1 public class ConcreteObserver1 implements Observer {2 3     @Override4     public void update() {5         System.out.println("1111111111111111");6     }7 8 }

  ConcreteObserver2(观察者实例2)

1 public class ConcreteObserver2 implements Observer {2 3     @Override4     public void update() {5         System.out.println("222222222222222");6     }7 8 }

  ConcreteSubject:

  

 1 public class ConcreteSubject implements Subject { 2     //装要获取消息的观察者 3     private List<Observer> list = new ArrayList<Observer>(); 4  5     @Override 6     public void attach(Observer observer) { 7  8         list.add(observer); 9     }10 11     @Override12     public void detach(Observer observer) {13         list.remove(observer);14     }15     16     @Override17     public void notifyObservers() {18         for (int i = 0; i < list.size(); i++) {19             list.get(i).update();20         }21 22     }23 24 }

 运行代码:

1     ConcreteSubject concreteSubject = new ConcreteSubject();2     concreteSubject.attach(new ConcreteObserver1());3     concreteSubject.attach(new ConcreteObserver2());4     concreteSubject.notifyObservers();

运行后的结果是:

 

观察者模式