我的java设计模式 总结【7】 观察者 observer

observer 观察者模式

oberserver与chain of responsibility 十分相似,也是调用后出发一系列的工作。但是区别在于观察者是更被动的去执行。最常见与经典的应用就是java 中的 swing组件中的时间处理都是采用这种设计模式进行完成的,当然也有叫什么事件驱动或者说消息订阅,我个人觉得都是一回事。针对于观察者来说,最起码需要有三大类的对象才可以叫观察者模式,

  • 第一个事件触发者,就是谁触发或者谁发起了事件,
  • 第二个就是观察者,有各式各样不同的观察者,等待着事件的处理。
  • 第三个就是事件,通常都是指怎么了,干了什么这个动作。

通俗来理解,张三是事件触发者,李四和王五是观察者,比如李四观察张三走了和点头的动作,只要张三走路了或者点头了李四就喊一声;王五只是观察张三点头,张三一点头王五就拍下手。那么在这里张三的点头和走路就是对应的事件。而李四的喊一声就是观察动作后需要执行的动作,王五也同理。

可以通过一个简单的java swing程序来看一下这个observer的执行模式。

public class ObServerJframe extends JFrame {

	// 设置一个简单的窗口
	ObServerJframe() {
		// 布局设置
		this.setBounds(20, 20, 500, 200);
		// 创造一个按钮
		JButton jb = new JButton();
		// 添加到窗口中
		this.add(jb);
		// 构造第一个观察者al1
		ActionListener al1 = new ActionListener() {
			// 当观察到事件的时候打印hello...
			public void actionPerformed(ActionEvent e) {
				System.out.println("hello...");

			}
		};
		// 构造第二个观察者al2
		ActionListener al2 = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 当观察到事件的时候打印hello...
				System.out.println("hi...");
			}
		};
		// 对按钮添加观察者
		jb.addActionListener(al1);
		jb.addActionListener(al2);
		// 设置窗口可见
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new ObServerJframe();
	}

}

当点击窗口按钮后因为有两个观察者再进行事件监听所以就会调用al1和al2中的方法。jdk的逻辑大致就是
当你addActionListerner的时候会在jbutton对象中将你的观察者保存在一个list对象中,当你需要执行时间的时候根据你的事件类型获取对应的事件列表,并循环列表分别执行里面的方法。添加部分可具体参考AbstractButton 类中源码。执行调用的话没找到呢还。但是大概这个observer就这样了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值