观察者模式(Observer)

来源:互联网 发布:avmoo 2016.7最新域名 编辑:程序博客网 时间:2024/06/05 04:43

观察者模式中通常有两个基本的概念主题:观察者和被观察者。当被观察者状态发生改变时,需要通知相应的观察者,当然,每个被观察者所对应的观察者可能不知一个,他们之间是1:n的关系。用专业一点的术语对观察者模式的描述为:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化。

观察者模式的一般实现方式如下:

1.定义观察者所具有的共同的接口:

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

2.定义两个观察者:

复制代码
1 class ObserverA implements Observer {2 3     @Override4     public void update() {5         System.out.println("ObserverA has received!");6     }7 }
复制代码
复制代码
1 class ObserverB implements Observer {2 3     @Override4     public void update() {5         System.out.println("ObserverB has received!");6     }7 }
复制代码

3.定义被观察者所具有的抽象父类:

复制代码
 1 abstract class Observable { 2  3     private Vector<Observer> vector = new Vector<Observer>(); 4  5     public void add(Observer observer) { 6         vector.add(observer); 7     } 8  9     public void del(Observer observer) {10         vector.remove(observer);11     }12 13     public void notifyObservers() {14         Enumeration<Observer> enumo = vector.elements();15         while (enumo.hasMoreElements()) {16             enumo.nextElement().update();17         }18     }19 20     public void operation() {21 22     }23 }
复制代码

4.定义具体的被观察者:

复制代码
class ConcretObservable extends Observable{        @Override      public void operation() {          System.out.println("update self!");          notifyObservers();      }    }
复制代码

5.测试:

复制代码
 1 public class ObserverTest {   2        3     public static void main(String[] args) {   4         Observable sub = new ConcretObservable();   5         sub.add(new ObserverA());   6         sub.add(new ObserverB());   7            8         sub.operation();   9     }  10   11 }  
复制代码

 6.原文博客地址

http://www.cnblogs.com/lwbqqyumidi/p/3784932.html

0 0
原创粉丝点击