观察者设计模式

一、模式定义

定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所依赖于它的对象都得到通知并被自动更新。

二、模式类图

观察者模式.png

三、示例代码

public interface Observer {
    public void update(Subject subject);
}
public interface Subject {

    public void attach(Observer observer);

    public void detach(Observer observer);

    public void notifyObservers();
}
public class ConcreteSubject implements Subejct {

    private List<Observer> observers = new ArrayList<Observer>();

    public void attach(Observer observer) {
        this.observers.add(observer);
    }

    public void detach(Observer observer) {
        this.observers.remove(observer);
    }

    protected void notifyObservers() {
        for (Observer observer : this.observers) {
            observer.update(this);
        }
    }
}
public class Publisher extends Subject {

    private String state;

    public String getState() {
        return this.state;
    }

    public void setState(String state) {
        this.state = state;
        this.notifyObservers();
    }
}

四、何时选用

  • 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时个, 依赖于它的观察者对象也会发生相应的变化。这样就把抽象模型的这两个方面离开了,使得它们可以独立地改变和复用。

  • 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要连带改变,这种情况可以选用观察者模式,被更改的那一个对象很明显就相当于是目标对象,而需要连带修改的多个其它对象,就作为多个观察者对象。

  • 当一个对象必须通知其它的对象,但是你又希望这个对象和其它的被它通知的对象是松散耦合的。也就是说这个对象其实不想知道具体被通知的对象。这种情况可以选用观察模式,这个对象就相当于是目标对象,而被它通知就是对察者对象了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 学习计划: 读书笔记5篇杂志1本读书5本 kindle两本 手机3本 《三体3:死者永生》★★★★★《当我谈跑步时...
    张無荻阅读 1,832评论 0 2
  • 首先声明,这篇内容仅仅是一个笨蛋在坐井观天,盲人摸象。 前言 我2011年5月(那个时候黄金周在五月)去过青岛,也...
    祝威廉三世阅读 3,550评论 0 0
  • 引用部分的来源,作者Arthursky 一般是用列图和活动图表示业务,类图和时序图形成设计UML活动图与流程图的区...
    杨小九阅读 13,493评论 0 5
  • 2018年2月20日于北京 天晴 看到一个颤巍巍的老人,走进一家餐厅。我猜她是想去菜场买馒头的,但春节期间菜场关门...
    yumingsweetie阅读 1,522评论 0 0

友情链接更多精彩内容