观察者模式:
当某个事件发生时,通知客户端进行响应,如监听器的原理,即可采用此模式来实现。
观察者对主题中某些属性的改变感兴趣,或者对某个事件的发生感兴趣。
这些变化将由主题通知观察者。
观察者需要先注册到主题中,只要注册到主题中,当事件发生时就会得到通知。
当不关心事件是否发生时,可以取消注册。
===》主题
package pattern.observer; public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObserver(); }
package pattern.observer; import java.util.ArrayList; import java.util.List; public class ConcreteSubject implements Subject { private String currentStatus; private boolean illegal; //维护若干感兴趣的观察者 private List<Observer> observers; public ConcreteSubject() { observers = new ArrayList<Observer>(); } //事件发生 public void setDatas(String status, boolean illegal) { this.currentStatus = status; this.illegal = illegal; notifyObserver();//事件发生时,通知客户端 } //注册 public void registerObserver(Observer observer) { if(observer==null) return; if(!observers.contains(observer)) this.observers.add(observer); } //取消注册 public void removeObserver(Observer observer) { if(observer==null) return; if(observers.contains(observer)) this.observers.remove(observer); } //将事件通知到客户端 public void notifyObserver() { for(Observer obs : observers) obs.update(this); } //客户端可以采用拉的方式提取需要的数据 public String getCurrentStatus() { return currentStatus; } public boolean isIllegal() { return illegal; } }
===》观察者
package pattern.observer; public interface Observer { void update(Subject subject); }
package pattern.observer; public class ClientA implements Observer { private String status; public ClientA(Subject subject) { subject.registerObserver(this); } public void update(Subject subject) { if(subject instanceof ConcreteSubject) { ConcreteSubject concreteSubject = (ConcreteSubject) subject; handleData(concreteSubject); showData(); } } private void handleData(ConcreteSubject subject) { this.status = subject.getCurrentStatus(); } private void showData() { System.out.println("status :" + this.status); } }
package pattern.observer; public class ClientB implements Observer { private boolean illegal; public ClientB(Subject subject) { subject.registerObserver(this); } public void update(Subject subject) { if(subject instanceof ConcreteSubject) { ConcreteSubject concreteSubject = (ConcreteSubject) subject; handleData(concreteSubject); showData(); } } private void handleData(ConcreteSubject subject) { this.illegal = subject.isIllegal(); } private void showData() { System.out.println("status :" + this.illegal); } }
===》测试
package pattern.observer; public class ObserverTest { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); //注册 Observer a = new ClientA(subject); Observer b = new ClientB(subject); //状态发生改变,观察者将得到通知 subject.setDatas("good", false); //解除注册 subject.removeObserver(b); subject.setDatas("bad", true); } }
相关推荐
iOS 设计模式 观察者模式
软件设计模式观察者模式
java 设计模式 观察者模式 简单实例 包括测试test类
head first 设计模式 观察者模式 C++ 代码
程序设计模式观察者模式
设计模式专题之(十八)观察者模式--设计模式观察者模式示例代码(python--c++)
设计模式观察者模式PPT学习教案.pptx
当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响其他对象的行为 l 订阅对象:当主题对象发生改变,订阅对象需要相应处理...
对应的博客链接:http://blog.csdn.net/t1234xy4/article/details/52432559#
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
设计模式-观察者模式(讲解及其实现代码)
这个代码主要以Android中的TextView发生变化,而凡是订阅了此类消息的实体类对象均能够打印出日志。例子很简单,起抛砖引玉,希望大家能够理解观察者模式在Android中的应用
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
设计模式C++学习之观察者模式(Observer)
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
是基于Java的实现观察者模式的银行系统,对正在学习Java设计模式的 有一定的帮助。。
1.策略模式:将一个算法封装到具有共同接口独立类中。从而使得算法可以互换。 2.(入口函数:Master)添加新的东西并不影响对context的调用
设计模式之观察者模式Java版本实现和UML类设计图
观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时...
设计模式之观察者模式,通过这个实例你就掌握观察者模式的原理和用法,值得学习。