观察者模式
来源:互联网 发布:mac os yosemite 多大 编辑:程序博客网 时间:2024/06/03 06:25
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。
这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。
首先定义一个接口,负责对被观察者对象的属性更新
package com.test.observer;/** * 被观察的对象接口 * @author yuewen * */// 抽象观察者角色public interface ObserveTest {public void update(String str);}
package com.test.observer;/** * 主题角色的接口,在其中声明方法(添加、移除观察者,通知观察者)需要被主题观察者继承: * * @author yuewen * */public interface Observerd {public void addObServerd(ObserveTest o);public void removeObServer(ObserveTest o);public void notifyWatchers(String str);}被观察者,实现ObserverTest接口中更新属性的方法
package com.test.observer;/** * 观察者 * * @author yuewen * */public class Wachter implements ObserveTest {@Overridepublic void update(String str) {System.out.println(str);}}主题角色,也正是负责观察对象已经通知被观察者对象的负责人,需要实现Observed的接口
package com.test.observer;import java.util.ArrayList;import java.util.List;/** * 主题角色,负责存放被观察的对象以及更新对象的属性 * * @author yuewen * */public class Conceter implements Observerd {// 存放需要观察的对象private List<ObserveTest> obServedObject = new ArrayList<ObserveTest>();@Overridepublic void addObServerd(ObserveTest o) {obServedObject.add(o);}@Overridepublic void removeObServer(ObserveTest o) {obServedObject.remove(o);}/** * 该方法是核心,遍历所有的观察者依依更新观察者的属性,入参则是需要被观察对象需要更新的属性 */@Overridepublic void notifyWatchers(String str) {if (!obServedObject.isEmpty() && !str.isEmpty() && str.trim() != "") {// 如果发生改变,则遍历存放观察者对象的信息并更新for (ObserveTest o : obServedObject) {// 更新对象o.update(str);}}}}测试类
package com.test.observer;/** * 测试类 * * @author yuewen * */public class MainTest {public static void main(String args[]) {// 被观察的对象1ObserveTest o1 = new Wachter();// 被观察对象2ObserveTest o2 = new Wachter();// 定义被观察的对象1的方法输出结果o1.update("hello");// 定义被观察的对象2的方法输出结果o2.update("world");// 主题角色,负责管理被观察者Conceter con = new Conceter();con.addObServerd(o1);con.addObServerd(o2);// 通知观察者,并改变原来对象的方法修改con.notifyWatchers("all changed");}}
结果如下:
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 用上了vAssistx
- IOS的后台模式播放音乐,显示专辑和图片信息
- 算法 topN
- 前后去空格
- public static T CloneObject<T>(this T obj) where T:class{}
- 观察者模式
- java实现文件拖拽
- sizeof() 类大小,空类大小
- RNN的通俗讲解(初级篇)
- Map四种获取key和value值的方法,以及对map中的元素排序
- Structure from Motion 很好的学习资料及代码
- hdu 2614 Beat
- 小P的故事——神奇的换零钱
- 【机房收费系统】选择性查询数据库 及 限制特殊字符的输入