观察者模式

设计模式:观察者模式

烂漫一生 提交于 2019-12-02 15:54:43
定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新 组成: 观察者,我们称它为Observer,有时候我们也称它为订阅者,即Subscriber 被观察者,我们称它为Observable,即可以被观察的东西,有时候还会称之为主题,即Subject 例子: 被观察者: public class Observable<T> { List<Observer<T>> mObservers = new ArrayList<Observer<T>>(); public void register(Observer<T> observer) { if (observer == null) { throw new NullPointerException("observer == null"); } synchronized (this) { if (!mObservers.contains(observer)) mObservers.add(observer); } } public synchronized void unregister(Observer<T> observer) { mObservers.remove(observer); } public void notifyObservers(T data) { for

观察者模式

爱⌒轻易说出口 提交于 2019-12-02 14:38:20
观察者抽象类:Observer.java 观察者具体实现类1:StockObserver.java 观察者具体实现类2:NBAObserver.java 被观察者抽象类:Subject.java 被观察者具体实现类:Secretary.java 测试类:Client.java 被观察者维护有观察者的一份列表,当被观察者的状态发生变化时,遍历观察者列表以通知他们 Observer.java package com.pattern.test.observer; public abstract class Observer { protected String name; protected Subject subjet; public Observer(String name, Subject subjet) { this.name = name; this.subjet = subjet; } public abstract void update(); } StockObserver.java package com.pattern.test.observer; public class StockObserver extends Observer{ public StockObserver(String name, Subject subjet) { super(name,

观察者模式

廉价感情. 提交于 2019-12-02 12:37:38
  观察者模式:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。简单的来说就是发布者发布信息,观察者收到信息后,做出反应。   观察者模式定义了对象间一对多的依赖关系,主要解决的是对象状态改变给其他对象通知的问题,同时还要易用性和低耦合度。 实现:   观察者模式使用三个类Subject、Observer和Client。 1、创建Subject类。 1 class Subject 2 { 3 private: 4 vector<Observer*> observers; 5 int state; 6 7 public: 8 9 void setState(int state) 10 { 11 //状态改变 12 this->state = state; 13 notifyAllObservers(); 14 } 15 16 void notifyAllObservers() 17 { 18 /* 19 vector<Observer*>::iterator ObsIter = observers.begin(); 20 //观察者做出响应 21 for (; ObsIter!=observers.end(); ++ObsIter) 22 { 23 (*ObsIter)->update(); 24 } 25 */ 26 for (auto

Java笔试面试-设计模式

。_饼干妹妹 提交于 2019-12-02 05:22:28
1.说一下设计模式?你都知道哪些? 答:设计模式总共有 23 种,总体来说可以分为三大类:创建型模式( Creational Patterns )、结构型模式( Structural Patterns )和行为型模式( Behavioral Patterns )。   ①创建型模式( Creational Patterns ): 工厂模式(Factory pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Patern) 创建者模式(Builder Pattern) 原型模式(Prototype Pattern)   ②结构型模式( Structural Patterns ): 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter Pattern) 组合模式(Composition Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 代理模式(Proxy Pattern) 享元模式(Flyweight Pattern)   ③行为型模式( Behavioral Patterns ): 访问者模式(Visitor Pattern) 模板模式(Template Pattern) 空对象模式(Null

一张图看懂Rxjava的原理

别等时光非礼了梦想. 提交于 2019-12-02 05:17:16
前言 Rxjava是NetFlix出品的Java框架, 官方描述为 a library for composing asynchronous and event-based programs using observable sequences for the Java VM,翻译过来就是“使用可观察序列组成的一个异步地、基于事件的响应式编程框架”。一个典型的使用示范如下: Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> emitter) throws Exception { String s = "1234"; //执行耗时任务 emitter.onNext(s); } }).map(new Function<String, Integer>() { @Override public Integer apply(String s) throws Exception { return Integer.parseInt(s); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe();

设计模式-观察者

删除回忆录丶 提交于 2019-12-02 03:43:12
观察者模式 认识观察者模式 订阅报纸的栗子 1)报社的业务是出版报纸 2)你向某家报社订阅他们的报纸,然后你就成为了他们的订阅用户,   只要报社有新的报纸出版,就会将报纸发送给你 3)当你取消订阅报纸时,你就从报社的订阅用户中删除,报社就不会再发送报纸给你 4)只要报社还在运营,就会一直有人订阅或取消订阅报纸 一般我们称上栗中的报社为“主题”,称订阅用户为“观察者”。 1)主题用于管理某些数据,一旦数据发生改变,新的数据就会发送到观察者手中 2)在主题数据发生改变时,只有订阅主题的观察者才能收到更新的数据 3)当新的对象订阅主题时,它会成为一个观察者,它可以收到主题更新的数据 4)当某个观察者取消订阅主题时,它不会再收到主题更新的数据 主题与观察者的图(待补。。。) 观察者模式 概念 定义了对象之间一对多的依赖关系,当一个对象的状态发生改变时,它所有的依赖者都会收到通知并更新数据。 UML类图 UML类图说明 1)主题接口,对象使用此接口注册观察者,删除观察者和更新观察者的状态 2)观察者接口,所有的潜在观察者必须实现此接口,其中只有一个update()方法,当主题状态发生变化时,它将被调用;   每个主题可以有多个观察者 3)一个具体的主题总是实现主题接口,并实现其注册观察者,删除观察者和更新观察者的状态的方法;   具体的方法也可以有设置/获取状态的方法。 4

观察者模式

南楼画角 提交于 2019-12-02 01:56:45
观察者模式,很简单,他把事物分为两派,一派是 观察者 ,另一派是 被观察者 。观察者将会注册到被观察者,当被观察者发生变动时,会通知观察者。 观察者需实现Observer接口,重写update()方法。 被观察者需继承Observable类,添加变动触发方法xx()【在里面设置触发条件,调用this.setChanged()设置变化位,调用this.notifyObservers()通知所有观察者】,添加观察对象注册方法addXYXY(Observer o)[注意千万不要想直接重写父类的addObserver()方法,该方法会导致栈溢出异常,我也不知道为啥。]。 下面给一个案例,想象你是一个经营网店的店长,你在京东和淘宝分别开有一个店铺,当有新货到手时,你需要推送商品到两家电商。产品列表作为被观察者,京东和淘宝作为观察者。 代码如下: //被观察者 /** * @Author: HouJun * @Date: 2019/10/23 8:28 * @Description: 观察者/监测者模式 * @version: 1.0 */ public class ProductList extends Observable { private List<String> productList = null; private static ProductList instance; /

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

风流意气都作罢 提交于 2019-12-02 00:11:20
观察者模式: 定义对象之间的一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新. 观察者模式的四个角色: 1.Subject(目标) 2.ConcreteSubject(具体目标) 3.Observer(观察者) 4.ConcreteObserver(具体观察者) 举例说明: 多人联机对战中,一个队友遭受攻击将给其他的盟友发送通知. 具体实现: /** * * @ClassName: ControlCenter * @Description: 指挥部,充当目标抽象类 * @author haibiscuit * @date 2019年10月22日 下午6:02:49 * */ public abstract class ControlCenter { protected String name; //队伍名称 protected List<Observer> list = new ArrayList<>(); public String getName() { return name; } public void setName(String name) { this.name = name; } //加入战队 public void join(Observer observer) { list.add(observer); } //撤出战队

观察者模式

和自甴很熟 提交于 2019-12-01 22:25:24
观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制。观察者模式定义了一种一对多的依赖关系, 让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己 。 观察者模式的结构 一个软件系统常常要求在某一个对象状态发生变化时,某些其他的对象作出相应的改变。能做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作。观察者模式是满足这一要求的各种设计方案中最重要的一种。 观察者模式所涉及的角色有: 1、抽象主题角色 抽象主题角色把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 2、具体主题角色 将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记过的观察者发出通知。 3、抽象观察者角色 为所有的具体观察者提供一个接口,在得到主题通知时更新自己 4、具体观察者角色 存储与主题的状态相关的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态协调 观察者模式实例 抽象主题角色,有增加观察者、删除观察者、通知观察者的功能: public abstract class

【趣味设计模式系列】之【观察者模式】

ぃ、小莉子 提交于 2019-12-01 20:27:12
1. 简介 观察者模式(Observer Pattern),也叫做发布订阅模式(Publish-Subscribe),它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 2. 图解 水果店进口水果销量良好,特别是进口蛇果,目前还没到货,有几个女孩小美、小静、小陶想预定进口蛇果,在到货之前就给水果老板说过,等到货后电话或者微信第一时间通知她们。 3. 案例实现 类图如下 定义预定顾客为观察者接口 Observer ,当收到被观察者通知后,执行 update() 方法; 定义水果店水果为被观察者抽象类 FruitObservable ,持有一个类型为 Vector<Observer> 的属性,存放观察者集合,同时定义三个方法 addObserver() , deleteObserver() , notifyObservers() ,分别为添加预定顾客,删除预定顾客,通知已预订顾客; 定义 FruitObservable 抽象接口的实现类为进口蛇果 ImportedRedDeliciousApple ; 定义 Observer 接口的实现类为预定进口蛇果的客户类 CustomerObserver ; 代码实现如下 package com.wzj.visitor.example1; /** * @Author: wzj * @Date