设计模式之模板方法模式

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

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

  代码结构图:

   

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


后记:

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

民族在振兴,

国家在富强,

一代代先驱奔赴,

一次次创新展现,

试看未来世界,

中国模板走向全球...



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值