设计模式之模板方法模式

来源:互联网 发布:cms采集电影采集 编辑:程序博客网 时间:2024/05/23 13:06

  我们知道中国是一个“制造大国”而非一个“创造大国”,为什么这么说呢?因为我们中国人的智慧是无与伦比的,我们对于“模仿”来说有着与生俱来的天赋,但是从“创新”的角度来看还是举步维艰。这次来谈谈国人的智慧-“模仿”。

  说起“模仿”不得不提“模板”,因为有一个“模板”才能模仿出自己需要的东西。话说,当年的国产山寨机可是风靡一时,那么就以制造手机来理解一下“模板方法模式”。

  代码结构图:

   

在这里Telephone是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法call()。这个模板方法是一个具体的方法,给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。

模板代码:

//手机  public abstract  class Telephone    {      //能够拨打电话        public abstract void dial() ;      //实现通话功能        public abstract void communicate();      //挂断电话        public abstract void hangup();      //汇总一下,才叫做通话-骨架        public void call()        {            //先拨号            this.dial();            //接听后可以通话            this.communicate();            //通话完毕,挂断            this.hangup();            Console.WriteLine("");        }    }
Nokia代码:

//山寨计划-Nokia  class Nokia : Telephone  {      public override void dial()      {          //Nokia独特的声响          Console.WriteLine("铃铃铃,Nokia用户拨打中...");       }      public override void communicate()      {          Console.WriteLine("告诉你个好消息,我用上Nokia了");      }      public override void hangup()      {          Console.WriteLine("滴..滴.");      }  }
Iphone代码:

//山寨计划-Iphone  class Iphone : Telephone  {      public override void dial()      {          //Nokia独特的声响          Console.WriteLine("啦啦啦,Iphone拨打中...");      }      public override void communicate()      {          Console.WriteLine("小李呀,我买苹果了,羡慕吧...");      }      public override void hangup()      {          Console.WriteLine("咚..咚..");      }  }
客户端代码:
 //客户端client        static void Main(string[] args)        {               //使用nokia            Telephone nokia1 = new Nokia();            nokia1.call();            //使用Iphone            Telephone iphone= new Iphone();            iphone.call();            Console.Read();        }
客户端中将变量声明改为父类,利用了多态性,实现了代码的复用。

启动后:


这样一款山寨的nokia和iphone就诞生了...


通过这个简单的小例子是否对模板方法模式有了初步的了解。那么模板模式有什么特点呢:

1.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理;

2.模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势;

3.模板方法提供了一个很好的代码复用平台;

4.当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。


后记:

  随着社会的发展,安卓的出现,山寨机慢慢走入了一个困境,真实地反映了一个道理:模仿毕竟不如原创好。

民族在振兴,

国家在富强,

一代代先驱奔赴,

一次次创新展现,

试看未来世界,

中国模板走向全球...