Balking Patten
------ 不需要的话,就算了
我现在正在餐厅吃饭,考虑要吃什么东西。
因为我已经决定要吃什么了,所以我举手表示我想要点餐。注意到我举起手的服务生,就向我走来。
这时,有另一位服务员也注意到我了。不过,他看到已经有一个人靠近我的座位,所以就不过来了……
这就是Balking Patten。
下面是在一个关于监视文件是否被修改的线程的一部分代码,警戒条件是文件是否被修改,如果被修改了就保存,如果发现文件没有被修改,就没有必要保存了,其中changed就是标志文件是否被修改的标志量。
public synchronized void save() throws IOException{
if(!changed){
return ;//若发现没有被修改,直接返回。
}
doSave();
changed = false ;
}
具体怎么用,我想大家都应该很清楚了,现在我们讲讲何时可以用到这个。
1.不要刻意去执行的时候:
就像上面提到的那种情况,我发现自己可以不执行,所以就直接返回,这样就提高了程序的性能。
2.不想等到境界条件成立时:
我们可以看到,上面的程序在判断警戒条件不成立时就立即退出了,马上进入下一步工作,这样在一定程度上提高了程序的响应性。
3.警戒条件只有第一次成立时:
就是在我们的程序中,警戒条件成立的机会只有一次,以后就不会再成立了,比如说我们初始化,我们可以采用这种模式来判断属性是否被初始化了,若已经被初始化了就没有必要再初始化了。
我们还谈谈怎么表示balk结果:
1.忽略balk的发生
2.以函数返回值的方式表示balk的发生
3.以异常的方式表示balk的发生