观察者模式
1、定义
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
2、结构
3、代码
(1)主题接口
public interface ISubject { public ISubject registerObserver(IObserver observer); public ISubject removeObserver(IObserver observer); public void notifyObserver(); }
(2)观察者接口
public interface IObserver { public void update(String status); }
(3)主题实现
public class ConcreteSubject implements ISubject { private List<IObserver> observerList = new ArrayList<IObserver>(); private String status; @Override public ISubject registerObserver(IObserver observer) { if(!observerList.contains(observer)){ observerList.add(observer); } return this; } @Override public ISubject removeObserver(IObserver observer) { if(observerList.contains(observer)){ observerList.remove(observer); } return this; } @Override public void notifyObserver() { for(IObserver observer: observerList){ observer.update(status); } } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; //状态改变后执行通知操作 notifyObserver(); } }
(4)观察者实现1
public class ConcreteObserver1 implements IObserver{ @Override public void update(String status) { System.out.println("ConcreteObserver1收到通知:当前状态为"+status); } }
(5)观察者实现2
public class ConcreteObserver2 implements IObserver{ @Override public void update(String status) { System.out.println("ConcreteObserver2收到通知:当前状态为"+status); } }
(6)客户端
public class Client { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); subject.registerObserver(new ConcreteObserver1()) .registerObserver(new ConcreteObserver2()); subject.setStatus("123"); } }
4、总结
推模型和拉模型
在观察者模式中,又分为推模型和拉模型两种方式。
● 推模型
主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。
● 拉模型
主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对象中获取,相当于是观察者从主题对象中拉数据。一般这种模型的实现中,会把主题对象自身通过update()方法传递给观察者,这样在观察者需要获取数据的时候,就可以通过这个引用来获取了。
相关推荐
java观察者模式观察者模式java观察者模式观察者模式java观察者模式观察者模式
Qt设计模式之观察者模式
观察者模式及实例,适合初学者阅读 。。。。。。。。。。。。。。。
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
观察者模式demo 观察者模式demo 观察者模式demo 观察者模式demo
java 设计模式 观察者模式 简单实例 包括测试test类
运用观察者模式及MVC模式的整合,是javaWeb的简单的实现了选民投票
iOS 设计模式 观察者模式
观察者模式Demo,设计模式,观察者模式
观察者模式使用
js观察者模式列子js观察者模式列子js观察者模式列子js观察者模式列子js观察者模式列子js观察者模式列子js观察者模式列子
设计模式之观察者模式Java版本实现和UML类设计图
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式
观察者模式小型框架
观察者模式
观察者模式最好的诠释 模式编程中的观察者模式delphi代码
观察者模式 c++ 工程角度实现
设计模式--观察者模式java例子
面向对象23种设计模式之观察者模式,简单明了。面向对象23种设计模式之观察者模式,简单明了。