zoukankan      html  css  js  c++  java
  • 观察者模式

    观察者模式

    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();

    运行后的结果是:

  • 相关阅读:
    有功功率和无功功率
    变压器的一些知识点
    服创大赛_思考
    AndroidsStudio_找Bug
    服创大赛第一次讨论_2019-1-14
    AndroidStudio_TextView
    JVM 专题十三:运行时数据区(八)直接内存
    JVM 专题十二:运行时数据区(七)对象的实例化内存布局与访问定位
    JVM 专题十一:运行时数据区(六)方法区
    JVM 专题十:运行时数据区(五)堆
  • 原文地址:https://www.cnblogs.com/liangstudyhome/p/4031152.html
Copyright © 2011-2022 走看看