打字猴:1.70048297e+09
1700482970
1700482971 new ProductEvent(p,ProductEventType.DEL_PRODUCT);
1700482972
1700482973 p=null;
1700482974
1700482975 }
1700482976
1700482977 //修改一个产品
1700482978
1700482979 public void editProduct(Product p,String name){
1700482980
1700482981 //修改后的产品
1700482982
1700482983 p.setName(name);
1700482984
1700482985 //产生修改事件
1700482986
1700482987 new ProductEvent(p,ProductEventType.EDIT_PRODUCT);
1700482988
1700482989 }
1700482990
1700482991 //获得是否可以创建一个产品
1700482992
1700482993 public boolean isCreateProduct(){
1700482994
1700482995 return isPermittedCreate;
1700482996
1700482997 }
1700482998
1700482999 //克隆一个产品
1700483000
1700483001 public Product clone(Product p){
1700483002
1700483003 //产生克隆事件
1700483004
1700483005 new ProductEvent(p,ProductEventType.CLONE_PRODUCT);
1700483006
1700483007 return p.clone();
1700483008
1700483009 }
1700483010
1700483011 }
1700483012
1700483013 在每个方法中增加了事件的产生机制,在createProduct方法中增加了创建产品事件,在editProduct方法中增加了修改产品事件,在delProduct方法中增加了遗弃产品事件,在clone方法中增加克隆产品事件,而且每个事件都是通过组合产生的,产品和事件的扩展性非常优秀。刚刚我们说完了产品和事件的关系处理,现在回到我们事件的观察者,它承担着非常重要的职责。我们知道它要处理事件,但是现在还没有想好怎么实现它处理事件的update方法,暂时保持为空。
1700483014
1700483015 我们继续分析,这么多的事件(现在只有1个产品类,如果产品类很多呢?比如30多个)不可能每个产品事件都写一个处理者吧,对于产品事件来说,它最希望的结果就是我通知了事件处理者(也就是观察者模式的观察者),其他具体怎么处理由观察者来解决,那现在问题是观察者怎么来处理这么多的事件呢?事件的处理者必然有N多个,如何才能通知相应的处理者来处理事件呢?一个事件也可能通知多个处理者来处理,并且一个处理者处理完毕还可能通知其他的处理者,这不可能让每个处理者独自完成这样“不可能完成的任务”,我们把问题的示意图画出来,如图36-4所示。
1700483016
1700483017
1700483018
1700483019
[ 上一页 ]  [ :1.70048297e+09 ]  [ 下一页 ]