TypedMessage 模式 与 java Swing 事件驱动模型

来源:互联网 发布:淘宝店铺装修图 编辑:程序博客网 时间:2024/06/01 09:33

意图 :将信息封装在一个对象中,从而使信息的传递能够以一种类型安全的方式来进行。客户可以对对象进行扩展,以便向对象中添加信息,同时无需牺牲类型的安全性

 

适用性   一下条件全部成立的时候使用本模式

 

1.一些类的对象可能希望收到来自其他对象的信息

2.信息的结构和复杂度是任意的,而且可能会随着软件的逐步发展而发生变化

3.信息的传递应该是静态类型安全的

 

 

类图

 

 

其实这个模式和 观察者模式有着很大的相似之处,它本身就是 观察者模式的一个拓展, 接收者在事件发生处注册监听器,当事件发生的时候通知所有监听该对象的接收者。

事件作为最重要的信息被封装起来交给Receiver 处理。  它提供了编译时的类型安全性。

 

我们设想一下了另外一个设计,我们定义一个注册表专门为了注册事件与接收者,此时我们向 注册表内注册Message ,也就是 MessageA 和MessageB父类型的,在通知接收器处理的时候 就必然会引起 instanceof  关键字的使用,而且在编译时刻不会接受检查。

 

反观我们上面的设计,时间类型是在编译时刻就确定的,所以无需强制向下转型。

 

 

下面我们来看一下 java Swing的事件驱动模型

 

谈到事件驱动模拟模型。  首先就是  事件源 监听器 和 处理器。 java swing中的实现非常是上面模式的良好写照。

 

首先不同的组件可以发生不同的事件,比如鼠标事件 键盘事件。  我们抽象出  ,鼠标  ,键盘,窗口 等事件,这些事件都可在不同的组件上发生。

我们在同一组件上分别注册不同的事件类型,当事件发生的时候接收者接收到提示,并直接获得准确的事件类型信息,并进行处理。这保证了编译时刻的安全性。

 

我们上面说的   JButton  JText 就相当于类图中的Sender , 但是Message可以有不同的类型,    Sender中 保存各种不同事件的组册列表 ,当事件发生的时候 向所有对该事件感兴趣的接收者发送通知。接受者可以获得确定类型的事件信息,并对事件进行处理。

 

原创粉丝点击