原创内容,转载请注明出处
观察者模式在Java中经常会使用到,最典型的就是swing和awt的事件机制,Spring中的事件机制亦如此,还有发布——订阅模型也是观察着模式,当发布者发生改变时,订阅者可以接收到发布者改变的信息。
好处:当需要添加新的订阅者时,不需要修改发布者内容,只需要创建新的订阅者(新的订阅者只需实现订阅接口即可),并且将订阅者注册到发布者对象中,则当发布者有发生变化时,新的订阅者可以接收到改变的通知。
UML类图如下
创建主题角色接口Subject,代码如下
package com.test.designermodel.observermodel; public interface Subject { void execute(); void addListener(Listener l); void removeListener(Listener l); void removeAllListener(); }
创建主题实现类ConcreteSubject,代码如下
package com.test.designermodel.observermodel; import java.util.ArrayList; import java.util.List; public class ConcreteSubject implements Subject { private List<Listener> listeners = new ArrayList<Listener>(); private int count; public void addListener(Listener l) { listeners.add(l); } public void execute() { count++; System.out.println("----------业务处理完成-------"); notifyListeners(); } public void removeAllListener() { if(listeners!=null){ listeners.clear(); } } public void removeListener(Listener l) { if(listeners!=null){ listeners.remove(l); } } private void notifyListeners(){ for (Listener l : listeners) { System.out.println("-----监听器开始处理------"); l.update(count); } } }
创建观察者接口,即事件机制中的监听器Lisener,代码如下
package com.test.designermodel.observermodel; public interface Listener { void update(int count); }
编写Junit测试代码
/** * 观察者模式 */ @Test public void testObserverModel(){ Subject subject = new ConcreteSubject(); subject.addListener(new Listener() { public void update(int count) { System.out.println("主题角色计数为"+count+",监听器处理"); } }); subject.execute(); subject.execute(); }
测试结果如下
如上例可以看出,观察者模式中一般都会使用回调模式。
源代码如附件
相关推荐
Qt设计模式之观察者模式
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
java观察者模式观察者模式java观察者模式观察者模式java观察者模式观察者模式
观察者模式及实例,适合初学者阅读 。。。。。。。。。。。。。。。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
观察者模式
java 设计模式 观察者模式 简单实例 包括测试test类
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式
设计模式之观察者模式Java版本实现和UML类设计图
设计模式-观察者模式(讲解及其实现代码)
设计模式--观察者模式java例子
运用观察者模式及MVC模式的整合,是javaWeb的简单的实现了选民投票
观察者模式Demo,设计模式,观察者模式
观察者模式使用
iOS 设计模式 观察者模式
我们开始发送消息第三步,在组件三中接收消息 第一步,我们先在main.js中注册一下bus 第二步,我们开始发送消息 第三步,在组件三中接收消息 vue的机制 观察者模式存在的意义 观察者模式 首先,提到观察者...
观察者模式小型框架