观察者模式

观察者模式

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     @Override
4     public void update() {
5         System.out.println("1111111111111111");
6     }
7 
8 }

  ConcreteObserver2(观察者实例2)

1 public class ConcreteObserver2 implements Observer {
2 
3     @Override
4     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     @Override
12     public void detach(Observer observer) {
13         list.remove(observer);
14     }
15     
16     @Override
17     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();

运行后的结果是:

 

posted @ 2014-10-17 14:54  perfect亮  阅读(143)  评论(0编辑  收藏  举报