天天小说网

22.1 韩非子身边的卧底是谁派来的

《孙子兵法》有云:“知彼知己,百战不殆;不知彼而知己,一胜一负;不知彼,不知己,每战必殆”,那怎么才能知己知彼呢?知己是很容易的,自己的军队嘛,很容易知根知底,那怎么知彼呢?安插间谍是个好办法,这是古今中外屡试不爽的方法,我们今天就来讲一个间谍的故事。

韩非子大家都应该记得吧,法家的代表人物,主张建立法制社会,实施重罚制度,真是非常有远见呀!看看现在社会在呼吁什么,建立法制化的社会,这在2000多年前就已经提出了。大家可能还不知道,法家还有一个非常重要的代表人物——李斯。李斯是秦国的丞相,最终被残忍车裂的那位,李斯和韩非子都是荀子的学生,李斯是师兄,韩非子是师弟,若干年后,李斯成为最强诸侯国秦国的上尉,致力于统一全国,于是安插了间谍到各个国家的重要人物的身边,以获取必要的信息,韩非子作为韩国的重量级人物,身边自然有不少间谍,韩非子做的事,李斯都了如指掌,那可是相隔千里!怎么做到的呢?间谍呀!我们先通过程序把这个过程展现一下,看看李斯是怎么监控韩非子的,先看两个主角的类图,如图22-1所示。

图22-1 监控者和被监控者

仅有这两个对象还是不够的,我们要解决的是李斯是怎么监控韩非子的?创建一个后台线程一直处于运行状态,一旦发现韩非子在吃饭或者娱乐就触发事件?这是真实世界的翻版,安排了一个间谍,观察韩非子的生活起居,并上报给李斯,然后李斯再触发update事件,类图继续扩充,如图22-2所示。

图22-2 通过后台线程监控

这个类图应该是程序员最容易想到的,你要监控,我就给你找个间谍角色(Spy类),我们来看程序的实现,先看我们的主角韩非子的接口(类似于韩非子这样的人,被观察者角色),如代码清单22-1所示。

代码清单22-1 被观察者接口

public interface IHanFeiZi {

//韩非子也是人,也要吃早饭的

public void haveBreakfast();

//韩非之也是人,是人就要娱乐活动

public void haveFun();

对接口进行扩充,增加了两个状态isHavingBreakfast(是否在吃早饭)和isHavingFun(是否在娱乐),以方便Spy进行监控,如代码清单22-2所示。

代码清单22-2 具体的被观察者

public class HanFeiZi implements IHanFeiZi {

//韩非子是否在吃饭,作为监控的判断标准

private boolean isHavingBreakfast = false;

//韩非子是否在娱乐

private boolean isHavingFun = false;

//韩非子要吃饭了

public void haveBreakfast() {

System.out.println("韩非子:开始吃饭了...");

this.isHavingBreakfast =true;

//韩非子开始娱乐了

public void haveFun() {

System.out.println("韩非子:开始娱乐了...");

this.isHavingFun = true;

//以下是bean的基本方法,getter/setter,不多说

public boolean isHavingBreakfast() {

return isHavingBreakfast;

public void setHavingBreakfast(boolean isHavingBreakfast) {

this.isHavingBreakfast = isHavingBreakfast;

public boolean isHavingFun() {

return isHavingFun;

public void setHavingFun(boolean isHavingFun) {

this.isHavingFun = isHavingFun;

其中有两个getter/setter方法,这个就没有在类图中表示出来,比较简单,通过isHavingBreakfast和isHavingFun这两个布尔型变量来判断韩非子是否在吃饭或者娱乐,韩非子属于被观察者,那还有观察者李斯,我们来看李斯的接口,如代码清单22-3所示。

代码清单22-3 抽象观察者

public interface ILiSi {

//一发现别人有动静,自己也要行动起来

public void update(String context);

李斯这类人比较简单,一发现自己观察的对象发生了变化,比如吃饭、娱乐,自己立刻也要行动起来,怎么行动呢?如代码清单22-4所示。

代码清单22-4 韩非子

public class LiSi implements ILiSi

更多内容加载中...请稍候...

若您看到此段落,代表章节内容加载失败,请关闭浏览器的阅读模式、畅读模式、小说模式,以及关闭广告屏蔽功能,或复制网址到其他浏览器阅读!