设计模式学习(十三):观察者模式
作者:Grey
原文地址:
观察者模式
观察者模式是一种行为型模式。在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
一般可以用做事件处理往往和责任链模式搭配使用, 举个例子:
界面上的按钮上一般都可以绑定事件,当我们按下按钮的时候,可以触发这些事件的执行,这里就可以用观察者模式来做, 我们先定义按钮这个对象
public class Button {
private List<ActionListener> listeners = new ArrayList<>();
public void addActionListener(ActionListener listener) {
this.listeners.add(listener);
}
@Override
public String toString() {
return "Button{" + "listeners=" + listeners + '}';
}
public void buttonPressed() {
ActionEvent event = new ActionEvent(System.currentTimeMillis(), this);
listeners.forEach(item -> item.actionPerformed(event));
}
}
由上可知,Button 中持有了一个列表,这个列表里面装的就是所有事件的列表,我们可以把事件绑定到这个按钮的事件列表中,这样就可以实现按钮执行 press 操作的时候,把对应的事件触发执行了
public interface ActionListener {
void actionPerformed(ActionEvent event);
}
模拟两个监听事件
public class Listener1 implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
System.out.println("Listener 1 listened it source: [" + event.getSource() + "], when is [" + event.getWhen() + "]");
}
}
public class Listener2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
System.out.println("Listener 2 listened it source: [" + event.getSource() + "], when is [" + event.getWhen() + "]");
}
}
主方法在调用的时候,将按钮绑定上述两个监听事件:
public class Main {
public static void main(String[] args) {
Button button = new Button();
button.addActionListener(new Listener1());
button.addActionListener(new Listener2());
button.buttonPressed();
}
}
当执行
button.buttonPressed()
的时候,对应的 listener1 和 listener2 就可以执行了。
上述过程的 UML 图如下
观察者模式的应用
-
邮件订阅、RSS Feeds,本质上都是观察者模式。
UML 和 代码
更多
参考资料
原文地址:http://www.cnblogs.com/greyzeng/p/16882100.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性