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

    运行后的结果是:

  • 相关阅读:
    Linux 间网线直连
    Ubuntu 14.04安装配置NFS
    Android Native IPC 方案支持情况
    使用WindowsAPI获取录音音频
    Ubuntu 64编译32位程序
    TensorFlow 安装 Ubuntu14.04
    纯css实现表单输入验证
    安装ELectron失败解决方案
    正则学习
    常见web攻击
  • 原文地址:https://www.cnblogs.com/liangstudyhome/p/4031152.html
Copyright © 2011-2022 走看看