打字猴:1.70046407e+09
1700464070
1700464071 既然有这么多的问题,那我们要想办法来解决这些问题,我们先来分析一下需求,女性提出一个请示,必然要获得一个答复,甭管是同意还是不同意,总之是要一个答复的,而且这个答复是唯一的,不能说是父亲作出一个决断,而丈夫也作出了一个决断,也即是请示传递出去,必然有一个唯一的处理人给出唯一的答复,OK,分析完毕,收工,重新设计,我们可以抽象成这样一个结构,女性的请求先发送到父亲类,父亲类一看是自己要处理的,就作出回应处理,如果女儿已经出嫁了,那就要把这个请求转发到女婿来处理,那女婿一旦去天国报道了,那就由儿子来处理这个请求,类似于如图16-2所示的顺序处理图。
1700464072
1700464073
1700464074
1700464075
1700464076 图16-2 女性请示的顺序处理图
1700464077
1700464078 父亲、丈夫、儿子每个节点有两个选择:要么承担责任,做出回应;要么把请求转发到后序环节。结构分析得已经很清楚了,那我们看怎么来实现这个功能,类图重新修正,如图16-3所示。
1700464079
1700464080
1700464081
1700464082
1700464083 图16-3 顺序处理的类图
1700464084
1700464085 从类图上看,三个实现类Father、Husband、Son只要实现构造函数和父类中的抽象方法response就可以了,具体由谁处理女性提出的请求,都已经转移到了Handler抽象类中,我们来看Handler怎么实现,如代码清单16-8所示。
1700464086
1700464087 代码清单16-8 修改后的Handler类
1700464088
1700464089 public abstract class Handler{
1700464090
1700464091 public final static int FATHER_LEVEL_REQUEST=1;
1700464092
1700464093 public final static int HUSBAND_LEVEL_REQUEST=2;
1700464094
1700464095 public final static int SON_LEVEL_REQUEST=3;
1700464096
1700464097 //能处理的级别
1700464098
1700464099 private int level=0;
1700464100
1700464101 //责任传递,下一个人责任人是谁
1700464102
1700464103 private Handler nextHandler;
1700464104
1700464105 //每个类都要说明一下自己能处理哪些请求
1700464106
1700464107 public Handler(int_level){
1700464108
1700464109 this.level=_level;
1700464110
1700464111 }
1700464112
1700464113 //一个女性(女儿、妻子或者是母亲)要求逛街,你要处理这个请求
1700464114
1700464115 public final void HandleMessage(IWomen women){
1700464116
1700464117 if(women.getType()==this.level){
1700464118
1700464119 this.response(women);
[ 上一页 ]  [ :1.70046407e+09 ]  [ 下一页 ]