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

    运行后的结果是:

  • 相关阅读:
    一个简单实现的遮罩层
    文字内容过长是自动出现省略号
    Maven入门学习(下)
    Maven入门学习(上)
    使用ODP.NET查询数据参数顺序问题及莫名ORA-01722错误提示
    Xamarin开发Android笔记:TextView行间距设定
    Xamarin开发Android笔记:图片切换ImageSwitcher
    Xamarin开发Android笔记:背景操作
    UI创意求助:手机贪吃蛇游戏方向控制键设计
    做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)
  • 原文地址:https://www.cnblogs.com/liangstudyhome/p/4031152.html
Copyright © 2011-2022 走看看