http://www.35java.com/zhibo/forum.php?mod=viewthread&tid=287&extra=page%3D1
考虑您要设计一个更换各种符号的工具类TextCharChange,您是否会采用这样的方式:
public void replace() {
switch(getChangeType()) {
case RN_TYPE: replaceRN();
break;
case N_TYPE: replaceN();
break;
case OTHER_TYPE: replaceOTHER():
break;
...
}
}
这么作的缺点是,日后您要增加更换符号的策略时,会有几个地方需要修改:增加TYPE常数、增加TextCharChange中的 replaceXXX()方法、增加 replace()方法中的switch case判断。
像这种策略采用的情况,可以将策略加以封装为一个物件,而不是将策略写死在某个类中,如此一来,策略可以独立于客户端,随时增加变化、增加或减少策略,即使是修改每个策略的内容,也不会对客户端程式造成影响。
来举个最简单的例子,首先要知道Windows与Linux的文字档案换行符号是不同的,Windows是 /r/n ,而Linux是 /n,今天您要设计一个文字编辑器,在适当的时候,您必须要能随时转换这两种符号,如果不采用上面的策略采用流程的话,要如何设计: