打字猴:1.700483076e+09
1700483076
1700483077 public void update(Observable o,Object arg){
1700483078
1700483079 //事件的源头
1700483080
1700483081 Product product=(Product)arg;
1700483082
1700483083 //事件
1700483084
1700483085 ProductEvent event=(ProductEvent)o;
1700483086
1700483087 //处理者处理,这里是中介者模式的核心,可以是很复杂的业务逻辑
1700483088
1700483089 for(EventCustomer e:customer){
1700483090
1700483091 //处理能力是否匹配
1700483092
1700483093 for(EventCustomType t:e.getCustomType()){
1700483094
1700483095 if(t.getValue()==event.getEventType().getValue()){
1700483096
1700483097 e.exec(event);
1700483098
1700483099 }
1700483100
1700483101 }
1700483102
1700483103 }
1700483104
1700483105 }
1700483106
1700483107 //注册事件处理者
1700483108
1700483109 public void registerCustomer(EventCustomer_customer){
1700483110
1700483111 customer.add(_customer);
1700483112
1700483113 }
1700483114
1700483115 }
1700483116
1700483117 我们在这里使用Vector来存储所有的事件处理者,在update方法中使用了两个简单的for循环来完成业务逻辑的判断,只要事件的处理者级别和事件的类型相匹配,就调用事件处理者的exec方法来处理事件,该逻辑是整个事件触发架构的关键点,但不是难点。请读者注意,在设计这样的框架前,一定要定义好消费者与生产者之间的搭配问题,一般的做法是通过xml文件类或者IoC容器配置规则,然后在框架启动时加载并驻留内存。
1700483118
1700483119 EventCustomer抽象类负责定义事件处理者必须具有的行为,首先是每一个事件的处理者都必须定义自己能够处理的级别,也就是通过构造函数来定义自己的处理能力,当然处理能力可以是多值的,也就是说一个处理者可以处理多个事件;然后各个事件的处理者只要实现exec方法就可以了,完成自己对事件的消费处理即可。我们先来看抽象的事件处理者,如代码清单36-8所示。
1700483120
1700483121 代码清单36-8 抽象的事件处理者
1700483122
1700483123 public abstract class EventCustomer{
1700483124
1700483125 //容纳每个消费者能够处理的级别
[ 上一页 ]  [ :1.700483076e+09 ]  [ 下一页 ]