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 ]
[
下一页 ]