设计模式观察者

观测者模式

设计原则:遵循迪米特、开闭原则常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定使用概率:40%复杂度:中变化点:观察者的种类与个数选择关键点:观察者与被观察者是否是多对一的关系逆鳞:观察者之间有过多的细节依赖

主要思想:其实比较简单,是发布-订阅形式的,就是类之间的关系,观察者与被观察者被观察者的属性变化了,那观察者就要随着改变,不过不是观察者一直监视着,而是被观察者主动通知现有的使用比较多,常见的比如nsq消息框架,我变动了就发一个消息,需要知道我变动的定义我发的topic就可以了
public class MyInfo {

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

    private String name;

    public void changeName(String name) {
        this.name = name;
        notifyObservers();
    }

    public void notifyObservers() {
        for (Observer observer : observerList) {
            observer.notifyNameChange();
        }
    }
}

public interface Observer {
    public void notifyNameChange();
}

public class Observer1 implements Observer{
    @Override
    public void notifyNameChange() {
        System.out.println("收到名称变更1");
    }
}

public class Observer2 implements Observer{
    @Override
    public void notifyNameChange() {
        System.out.println("收到名称变更2");
    }
}
时间: 2024-11-02 21:35:49

设计模式观察者的相关文章

PHP设计模式-观察者

PHP设计模式-观察者 一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式.一个对象通过添加一个attach方法允许观察者注册自己,使本身变得可观察.当被观察的对象更改时,它会将消息发送到已注册的观察者.观察者使用该信息执行的操作与被观察的对象无关.观察者模式是一种事件系统,意味着这一模式允许某些类通过观察被观察类的状态变化,做出相应的动作. 观察者模式UML图 php5中提供了观察者observer与被观察者subject接口 interface SplSubject

iOS常用设计模式——观察者设计模式

观察者设计模式详解 观察者设计模式详解 基本概念 NSNotificationCenter的使用 添加监听 接收消息 删除监视 KVO的使用 基本概念 注册观察者 观察者对象发生变化时的回调方法 remove观察者身份 代码实现 基本概念 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.而在IOS开发中我们可能会接触到的经典观察者模式的实现方式,有这么几种:NSNotificationCen

JAVA设计模式——观察者设计模式和Reactor反应堆设计模式

被观察者(主题)接口 定义主题对象接口 /**抽象主题角色: 这个主题对象在状态上发生变化时,会通知所有观察者对象 也叫事件对象 */ public interface Subject { //增加一个观察者 public void addWatcher(Watcher watcher); //删除一个观察者 public void removeWatcher(Watcher watcher); //通知所有的观察者 public void notifyWatchers(String str);

设计模式——观察者

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有的依赖者都会收到通知并自动更新: 定义主题,主题的功能是持有观察者的引用,提供注册.取消注册和通知,并且有状态:观察者实现接口中的update方法,必须注册具体主题: JDK自带了对观察者的支持功能 被观察者Observable对象,提供add/delete/notifyObserver()和setChanged()设置状态方法 观察者Observer接口,提供update()方法进行相关的更新操作. 观察者类图: 以下程序模拟

设计模式-观察者

定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. UML图示: 代码示例:就拿之前做过的项目举例,博主要实现餐厅打印订单的功能,如下图示. 通过上图很明显我们发现订单中心与打印机存在一对多的关系,根据上面对于观察者定义,采用观察者模式,可以让订单中心的状态改变的同时,让所有打印机都接收到状态的改变.下面我们再来看一张UML图. 定义Subject接口 public interface Subject { ? ????public void

Android与设计模式——观察者(Observer)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式的结构 一个软件系统里面包含了

设计模式--观察者(Observer)

GOF给出的定义: Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 定义了对象之间的一种一对多的依赖关系,这样,当一个对象的状态发生变化时,所有的依赖对象都被通知并自动更新. 包含观察者与被观察者(也称为主题) 使用场景: 1.有两个抽象类型相互依赖.将他

设计模式--观察者设计模式

定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新. Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步. java提供Obeservable类和Observer接口. 比如购房,购房者是观察者,而房价是被观察者,房价的变化是被观察者所关注的. /** * 被观察者 * @author soyoungboy * */ public class House extends Observable {

python设计模式-观察者

定义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖的对象都会得到通知并被自动更新. 观察者模式是对象的行为模式,又叫发布-订阅(pubish/subscribe)模式,模型-视图(Model/View模式),源-监听器(Source/Listener)模式或从属者(Dependents)模式. 角色: 抽象主题,具体主题(发布者), 抽象观察者,具体观察者(订阅者) 适用场景: 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面.将两者封装在独立的对象中以使它们各