zoukankan      html  css  js  c++  java
  • 设计模式总结篇系列:观察者模式(Observer)

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

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

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

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

    2.定义两个观察者:

    1 class ObserverA implements Observer {
    2 
    3     @Override
    4     public void update() {
    5         System.out.println("ObserverA has received!");
    6     }
    7 }
    1 class ObserverB implements Observer {
    2 
    3     @Override
    4     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 }  

     

  • 相关阅读:
    遗产继承骗局
    Nginx配置https和wss
    Servlet乱码问题
    logback+slf4j作为日志系统
    InteliJ Idea通过maven创建webapp
    pip安装注意事项
    [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接
    Python Socket编程初探
    有用的git片段
    Python使用chardet包自动检测编码
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3784932.html
Copyright © 2011-2022 走看看