Java设计模式_行为型_观察者模式_任意行为的监听
来源:互联网 发布:美津浓跑鞋矩阵图 编辑:程序博客网 时间:2024/05/22 14:06
转载请注明出处:http://blog.csdn.net/ljmingcom304/article/details/50435725
本文出自:【梁敬明的博客】
1. 什么是被观察者
被观察者指的是当其行为或状态发生变化时,第一时间通知观察者,观察者对其行为或状态的变化做相应的回应。当观察者需要接受通知时,需要在被观察者中进行注册,当不再接收通知时,在被观察者中移除注册即可。当被观察者行为或状态发生变化时,可以通知观察者,让其指定方法做出响应。
//被观察者public interface Subject { // 注册观察者 void registerObserver(Class<?> clazz); // 反注册观察者 void removeObserver(Class<?> clazz); // 通知观察者的指定方法做出响应 void notifyObservers(String methodName, Object... obj);}public class SubjectImpl implements Subject { private List<Class<?>> list = new ArrayList<Class<?>>(); //通知观察者的指定方法做出响应 @Override public void notifyObservers(String methodName, Object... objs) { for (Class<?> clazz : list) { Method[] methods = clazz.getMethods(); for (Method method : methods) { if (method.getName().equals(methodName)) { try { method.invoke(clazz.newInstance(), objs); } catch (Exception e) { e.printStackTrace(); } } } } } // 添加观察者到注册列表 @Override public void registerObserver(Class<?> clazz) { if (clazz != null) { list.add(clazz); } } // 从注册列表中移除观察者 @Override public void removeObserver(Class<?> clazz) { if (clazz != null) { list.remove(clazz); } }}
2. 什么是观察者
观察者可以是任意对象,只要在被观察者中进行了注册,就可以接收观察者的行为或状态的变化,被观察者可以指定观察者的任意公开方法做出响应。
public class ZhangSan{ public void update() { System.out.println("张三"); }}public class WangWu{ public void update() { System.out.println("王五"); } public void doSomething() { System.out.println("做一些事情"); }}
3. 行为的动态监听
创建一个被观察者,将观察者注册到被观察者中,同时通知观察者的任意公开方法做出响应。
public class Client { public static void main(String[] args) { Subject sub = new SubjectImpl(); sub.registerObserver(ZhangSan.class); sub.registerObserver(WangWu.class); sub.notifyObservers("update"); sub.notifyObservers("doSomething"); }}
0 0
- Java设计模式_行为型_观察者模式_任意行为的监听
- Java设计模式_(行为型)_观察者模式
- Java设计模式_行为模式_观察者模式
- Java设计模式_(行为型)_责任链模式
- Java设计模式_(行为型)_命令模式
- Java设计模式_(行为型)_迭代模式
- Java设计模式_(行为型)_中介者模式
- Java设计模式_(行为型)_备忘录模式
- Java设计模式_(行为型)_状态模式
- Java设计模式_(行为型)_策略模式
- Java设计模式_(行为型)_模版方法模式
- Java设计模式_(行为型)_访问者模式
- Java设计模式_(行为型)_解析器模式
- Java设计模式_行为型_访问者模式_每个人的不同结果
- Java设计模式_行为型_解释器模式_加减法的运算
- 23种设计模式(16)_行为型_观察者模式(Observer Pattern)
- Java设计模式_行为型_责任链模式_差旅报销如此简单
- Java设计模式_行为型_中介者模式_租个房子不过如此
- CodeForces 417ESquare Table【随机数】
- HTML5学习之路--SVG配合js制作动画
- GlassFish移植Tips
- iOS视图间的最小距离如何在Auto Layout 下进行设置?
- Java中判断String不为空的问题
- Java设计模式_行为型_观察者模式_任意行为的监听
- Android 代码片段(一)
- iOS两个app应用之间的互相跳转
- Jquery-zTree的基本用法
- 将h.264视频流封装成flv格式文件(一.flv格式)
- oracle 去除重复字符串函数
- 研究-数据库死锁
- 三层架构——三层登录类图与序列图
- 不光是查找值!"二分搜索"总结