打字猴:1.700468816e+09
1700468816 设计模式之禅 [:1700454017]
1700468817 设计模式之禅 21.5 最佳实践
1700468818
1700468819 组合模式在项目中到处都有,比如现在的页面结构一般都是上下结构,上面放系统的Logo,下边分为两部分:左边是导航菜单,右边是展示区,左边的导航菜单一般都是树形的结构,比较清晰,有非常多的JavaScript源码实现了类似的树形菜单,大家可以到网上搜索一下。
1700468820
1700468821 还有,大家常用的XML结构也是一个树形结构,根节点、元素节点、值元素这些都与我们的组合模式相匹配,之所以本章节不以XML为例子讲解,是因为很少有人还直接读写XML文件,一般都是用JDOM或者DOM4J了。
1700468822
1700468823 还有一个非常重要的例子:我们自己本身也是一个树状结构的一个树枝或树叶。根据我能够找到我的父母,根据父亲又能找到爷爷奶奶,根据母亲能够找到外公外婆等,很典型的树形结构,而且还很规范(这个要是不规范那肯定乱套了)。
1700468824
1700468825
1700468826
1700468827
1700468828 设计模式之禅 [:1700454018]
1700468829 设计模式之禅 第22章 观察者模式
1700468830
1700468831 设计模式之禅 [:1700454019]
1700468832 22.1 韩非子身边的卧底是谁派来的
1700468833
1700468834 《孙子兵法》有云:“知彼知己,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆”,那怎么才能知己知彼呢?知己是很容易的,自己的军队嘛,很容易知根知底,那怎么知彼呢?安插间谍是个好办法,这是古今中外屡试不爽的方法,我们今天就来讲一个间谍的故事。
1700468835
1700468836 韩非子大家都应该记得吧,法家的代表人物,主张建立法制社会,实施重罚制度,真是非常有远见呀!看看现在社会在呼吁什么,建立法制化的社会,这在2000多年前就已经提出了。大家可能还不知道,法家还有一个非常重要的代表人物——李斯。李斯是秦国的丞相,最终被残忍车裂的那位,李斯和韩非子都是荀子的学生,李斯是师兄,韩非子是师弟,若干年后,李斯成为最强诸侯国秦国的上尉,致力于统一全国,于是安插了间谍到各个国家的重要人物的身边,以获取必要的信息,韩非子作为韩国的重量级人物,身边自然有不少间谍,韩非子做的事,李斯都了如指掌,那可是相隔千里!怎么做到的呢?间谍呀!我们先通过程序把这个过程展现一下,看看李斯是怎么监控韩非子的,先看两个主角的类图,如图22-1所示。
1700468837
1700468838
1700468839
1700468840
1700468841 图22-1 监控者和被监控者
1700468842
1700468843 仅有这两个对象还是不够的,我们要解决的是李斯是怎么监控韩非子的?创建一个后台线程一直处于运行状态,一旦发现韩非子在吃饭或者娱乐就触发事件?这是真实世界的翻版,安排了一个间谍,观察韩非子的生活起居,并上报给李斯,然后李斯再触发update事件,类图继续扩充,如图22-2所示。
1700468844
1700468845
1700468846
1700468847
1700468848 图22-2 通过后台线程监控
1700468849
1700468850 这个类图应该是程序员最容易想到的,你要监控,我就给你找个间谍角色(Spy类),我们来看程序的实现,先看我们的主角韩非子的接口(类似于韩非子这样的人,被观察者角色),如代码清单22-1所示。
1700468851
1700468852 代码清单22-1 被观察者接口
1700468853
1700468854 public interface IHanFeiZi{
1700468855
1700468856 //韩非子也是人,也要吃早饭的
1700468857
1700468858 public void haveBreakfast();
1700468859
1700468860 //韩非之也是人,是人就要娱乐活动
1700468861
1700468862 public void haveFun();
1700468863
1700468864 }
1700468865
[ 上一页 ]  [ :1.700468816e+09 ]  [ 下一页 ]