• 设计模式总结篇系列:观察者模式(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 }  

     

  • 相关阅读:
    linux----别名
    linux---三剑客
    如何給linux安装 jdk呢?
    linux---文件颜色含义
    reason: no instance(s) of type variable(s) exist so that ProjectByProvinceVO conforms to ProjectDetailVO
    jrebel的坑
    使用自定义注解,但是运行时获取不到注解的值
    springboot启动失败,没有任何提示,trycatch也没有输出
    case when 中计数如何去重
    case when 中如何使用计数
  • 原文地址:https://www.cnblogs.com/lwbqqyumidi/p/3784932.html
Copyright © 2020-2023  润新知