http://oldboy-bj.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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,今天您要设计一个文字编辑器,在适当的时候,您必须要能随时转换这两种符号,如果不采用上面的策略采用流程的话,要如何设计:

posted on 2011-01-06 16:15  老男孩咖啡  阅读(193)  评论(0编辑  收藏  举报