设计模式之模板方法模式
来源:互联网 发布: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.当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
后记:
随着社会的发展,安卓的出现,山寨机慢慢走入了一个困境,真实地反映了一个道理:模仿毕竟不如原创好。
民族在振兴,
国家在富强,
一代代先驱奔赴,
一次次创新展现,
试看未来世界,
中国模板走向全球...
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- 百度收录周5释放
- 网站改标题 谷歌正常反应百度慢N步
- hdu1013
- 2012年度总结
- 如何让linux内核make uImage时Entry Point(入口地址)自动偏移64个字节
- 设计模式之模板方法模式
- hdu 1171 Big Event in HDU
- cassandra snitch (version 1.2)
- hdu 2059
- 欧冠赛-C罗破门皇马主场1-1平曼联
- linux查看cpu颗数、核数及是否超线程
- 如何在ANDROID JNI 的C++中打Log
- 春节魅影 yeah
- //九度OJ教程98 动态规划之LCS(最长公共子序列)