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
1700468866
对接口进行扩充,增加了两个状态isHavingBreakfast(是否在吃早饭)和isHavingFun(是否在娱乐),以方便Spy进行监控,如代码清单22-2所示。
1700468867
1700468868
代码清单22-2 具体的被观察者
1700468869
1700468870
public class HanFeiZi implements IHanFeiZi{
1700468871
1700468872
//韩非子是否在吃饭,作为监控的判断标准
1700468873
1700468874
private boolean isHavingBreakfast=false;
1700468875
1700468876
//韩非子是否在娱乐
1700468877
1700468878
private boolean isHavingFun=false;
1700468879
1700468880
//韩非子要吃饭了
[
上一页 ]
[ :1.700468831e+09 ]
[
下一页 ]