您的位置:首页 > 编程语言 > Java开发

javax swing 事件监听学到的设计模式 观察者模式

2017-04-21 18:51 267 查看
事件监听机制的设计模式叫观察者模式,也叫订阅模式。

监听机制是这样的,swing的组件可以发起(触发)一个事件。这个事件被发起时,它将被一个或多个监听器接收并处理。所以,事件的发生可以和事件的处理相分离,从而降低耦合,这是一个分离接口和实现的极佳的例子。

让我们看看一个事件监听机制中的角色:

n 组件 ——v 发起  —— n 事件

n 监听器 ——v 接受and处理——n 事件

组件:是发起事件的具体类。监听器:是接收和处理事件的具体类。所以,事件的发生可以和事件的处理相分离。

对应到观察者模式中来:

观察者         < —— ——>   被具体监听器实现的那个类,这是一个接口。对应于 java.awt.event里面的全部接口

具体观察者 < —— ——>   具体监听器 XXXListener 。对应于 java.awt.event里面的部分类,因为还有一部分类是继承了抽象类

目标            < —— ——>    组件的父类,这是一个抽象类。对应于javax.swing里面的部分抽象类。

具体目标    < —— ——>    组件类。对应于所有组件类。

如何为一个组件注册监听器?

1 创建一个组件对象。

2 创建一个监听器类(建议这个类是一个匿名内部类,因为它含有其外部类对象的引用,这就为跨越类和子系统边界的调用提供了一种优雅的方式),唯一的要求是实现相应的监听器接口,然后实现里面的方法(也就是对事件处理逻辑)。最后创建本类对象便创建了一个具体的监听器。

3 用组件上的addXXXListener()方法给自己注册一个或几个(2)中创建的监听器对象。

一个组件可以注册多个不同类型的监听器。

联系事件监听机制,我们可以发现观察者模式的使用场合:

1.当一个抽象模型(事件监听模型)有两个方面(组件和监听器),其中一个方面依赖于另一方面。 将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

2.当对一个对象(组件对象)的改变需要同时改变其它对象(监听器对象),而不知道其它对象具体有几中、几个对象有待改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: