美文网首页
设计模式(三)观察者模式-装饰对象

设计模式(三)观察者模式-装饰对象

作者: 天色将变 | 来源:发表于2019-06-23 18:09 被阅读0次
定义

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

解决的问题

对象A(主题)有数据,对象BCD依赖于A的数据,当A的数据有状态变化时,BCD需要及时知道。

使用到的原则
  • 松耦合,当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
类图
image.png
描述
  • 定义主题接口Subject,三个方法,注册、删除和通知状态更新观察者。
  • 定义观察者接口Observer,一个方法,update,表示接受主题状态更新。
  • SomeSubject是Subject的具体实现,实现了三个接口方法。
  • ObserverSubclass1和ObserverSubclass2都实现了Observer接口,是两个观察者。二者都保留了Subject的引用,用于获取状态更新getStatusMsg()。
伪代码

主题接口

public interface Subject{
  public void registerObserver(Observer o);
  public void removeObserver(Observer o);
  public void notifyChanges();
}

观察者接口

public interface Obsever{
  public void update();
}

主题的具体实现

public class SomeSubject implements Subject{
  private ArrayList observers;
  public SomeSubject(){
    observers = new ArrayList();
  }
  public void registerObserver(Observer o){
    observers.add(o);
  }
  public void removeObserver(Observer o){
    int i = observers.indexOf(o);
    if(i>=0){
      observers.remove(i);
    }
  }
  public void notifyChanges(){
    for(int i=0;i<observers.length();i++){
      Observer o = observers[i];
      o.update();
    }
  }
  public StatusMsg getStatusMsg(){
    return msg;
  }
  public void statusChange(){
    notifyChanges();
  }
}

观察者的一个具体实现

public class ObserverSubclass1 implements Observer{
  private Subject subject;
  public ObserverSubclass1(Subject s){
    this.subject = s;
    s.registObserver(this);// 将观察者添加进观察者列表
  }
  public void update(){
    toDo();
  }
  public void toDo(){
    SomeSubject  ss = (SomeSubject)subject;
    StatusMsg sm = ss.getStatusMsg();// 获取状态变化信息
    System.out.println(sm.toString());
  }
}

示例

SomeSubject ss = new SomeSubject();//定义主题
ObserverSubclass1 os1 = new ObserverSubclass1(ss);//创建观察者1,并注册
ObserverSubclass2 os2 = new ObserverSubclass2(ss);//创建观察者2,并注册
ss.statusChange();// 主题状态变化,通知到os1 os2
ss.statusChange();// 主题状态再次变化,通知到os1 os2
一句话总结

我订阅了你,你变化了,你要告诉我。

相关文章

  • C++笔记十一(C++设计模式)

    本周内容(1)设计模式简介(2)面向对象设计原则(3)模板方法(4)策略模式(5)观察者模式(6)装饰模式(7)桥...

  • Boolan(博览网)——C++ 设计模式(第十一周)

    目录 1. 设计模式简介 2. 面向对象设计原则 3. 模板方法 4. 策略模式 5. 观察者模式 6. 装饰模式...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • 设计模式(三)观察者模式-装饰对象

    定义 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。...

  • Summary of February 2017

    READING Head First 设计模式:完成50%。内容:观察者模式、装饰者模式、工厂模式、单件模式、命令...

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

  • Android中的设计模式之观察者模式

    参考 《设计模式:可复用面向对象软件的基础 》5.7 Observer 观察者 对象行为型模式 《设计模式解析》 ...

  • php高级面试准备

    基础知识 设计模式 Factory工厂模式 Single单例模式 注册模式 适配器模式 策略模式 观察者模式 装饰...

网友评论

      本文标题:设计模式(三)观察者模式-装饰对象

      本文链接:https://www.haomeiwen.com/subject/rkdiqctx.html