打字猴:1.700464635e+09
1700464635 设计模式之禅 [:1700453989]
1700464636 设计模式之禅 16.4 最佳实践
1700464637
1700464638 在例子和通用源码中Handler是抽象类,融合了模板方法模式,每个实现类只要实现两个方法:echo方法处理请求和getHandlerLevel获得处理级别,想想单一职责原则和迪米特法则吧,通过融合模板方法模式,各个实现类只要关注的自己业务逻辑就成了,至于说什么事要自己处理,那就让父类去决定好了,也就是说父类实现了请求传递的功能,子类实现请求的处理,符合单一职责原则,各个实现类只完成一个动作或逻辑,也就是只有一个原因引起类的改变,我建议大家在使用的时候用这种方法,好处是非常明显的了,子类的实现非常简单,责任链的建立也是非常灵活的。
1700464639
1700464640 责任链模式屏蔽了请求的处理过程,你发起一个请求到底是谁处理的,这个你不用关心,只要你把请求抛给责任链的第一个处理者,最终会返回一个处理结果(当然也可以不做任何处理),作为请求者可以不用知道到底是需要谁来处理的,这是责任链模式的核心,同时责任链模式也可以作为一种补救模式来使用。举个简单例子,如项目开发的时候,需求确认是这样的:一个请求(如银行客户存款的币种),一个处理者(只处理人民币),但是随着业务的发展(改革开放了嘛,还要处理美元、日元等),处理者的数量和类型都有所增加,那这时候就可以在第一个处理者后面建立一个链,也就是责任链来处理请求,如果是人民币,好,还是第一个业务逻辑来处理;如果是美元,好,传递到第二个业务逻辑来处理;日元、欧元……这些都不用在对原有的业务逻辑产生很大改变,通过扩展实现类就可以很好地解决这些需求变更的问题。
1700464641
1700464642 责任链在实际的项目中使用也是比较多的,我曾经做过这样一个项目,界面上有一个用户注册功能,注册用户分两种,一种是VIP用户,也就是在该单位办理过业务的,一种是普通用户,一个用户的注册要填写一堆信息,VIP用户只比普通用户多了一个输入项:VIP序列号。注册后还需要激活,VIP和普通用户的激活流程也是不同的,VIP是自动发送邮件到用户的邮箱中就算激活了,普通用户要发送短信才能激活,为什么呢?获得手机号码以后好发广告短信啊!项目组就采用了责任链模式,甭管从前台传递过来的是VIP用户信息还是普通用户信息,统一传递到一个处理入口,通过责任链来完成任务的处理,类图如图16-5所示。
1700464643
1700464644
1700464645
1700464646
1700464647 图16-5 用户注册类图
1700464648
1700464649 其中RegisterAction是继承了Strust2中的ActionSupport,实现HTTP传递过来对象组装,组装出一个HashMap对象UserInfoMap,传递给Handler的两个实现类,具体是那个实现类来处理的,就由HashMap上的用户标识来做决定了,这个和上面我们举的例子很类似,读者可以自行实现。
1700464650
1700464651
1700464652
1700464653
1700464654 设计模式之禅 [:1700453990]
1700464655 设计模式之禅 第17章 装饰模式
1700464656
1700464657 设计模式之禅 [:1700453991]
1700464658 17.1 罪恶的成绩单
1700464659
1700464660 “中庸”是中国儒教文化的集中体现,说话或做事情都不能太直接,需要有技巧。比如谈话,如果你要批评某个人,你不能一上来就说他这做得不对,那做得不对,你要先肯定他的成绩,表扬一下优点;然后再指出不足,指出错误的地方,最后再来点激励,你修改了这些缺点后有哪些好处,比如你能带更多的小兵,升职等。如果你一上来就是一顿批评,你瞅瞅看,对方肯定是不服气,顶撞甚至是直接说:“此处不养爷,自有养爷处”,于是甩门而去。
1700464661
1700464662 这是说话,做事情也是一样。在山寨产品流行之前,假货也是比较“盛行”的。本人2002年买了一部手机,当时老板吹得天花乱坠,承诺这部手机是最新的,我看着也像,壳子是崭新的,包装是崭新的,没有任何瑕疵,就是比正品便宜了很多,于是我买了,因为缺钱啊!用了3个月,坏了,送修检查,结果诊断出这是新壳装旧机,我晕!拿一部旧手机的线路板,找个新的外壳、屏幕、包装就成了新手机,害人不浅啊!
1700464663
1700464664 我们不说不开心的事情,今天以什么例子为开场白呢?就说说我上小学的糗事吧。我上小学的时候学习成绩非常差,班级上有40多个同学,我基本上都是排在45名以后,按照老师给我的评价就是:“不是读书的料”。但是我父亲管得很严格,明知道我不是这块料,还是“赶鸭子上架”,每次考完试我都战战兢兢,“竹笋炒肉”是肯定少不了的,能少点就少点吧,肉可是自己的。四年级期末考试考完,学校出来个很损的招儿(这招儿现在很流行的),打印出成绩单,要家长签字,然后才能上五年级,我那个恐惧呀,不过也就是几秒钟的时间,玩起来什么都忘记了。我们做架构,做设计,任何值得我们回忆的事件都可以通过设计记录下来。当然了,这份成绩单的事情也是可以通过类图表示的,如图17-1所示。
1700464665
1700464666
1700464667
1700464668
1700464669 图17-1 成绩单类图
1700464670
1700464671 成绩单的抽象类,然后有一个四年级的成绩单实现类,So Easy,我们先来看抽象类,如代码清单17-1所示。
1700464672
1700464673 代码清单17-1 抽象成绩单
1700464674
1700464675 public abstract class SchoolReport{
1700464676
1700464677 //成绩单主要展示的就是你的成绩情况
1700464678
1700464679 public abstract void report();
1700464680
1700464681 //成绩单要家长签字,这个是最要命的
1700464682
1700464683 public abstract void sign();
1700464684
[ 上一页 ]  [ :1.700464635e+09 ]  [ 下一页 ]