<七>阅读<<大话设计模式>>该模板模型
2015-07-10 14:31
288 查看
哈哈,没想到。在不知不觉中拥有第七书面文章,看来我仍然非常有毅力。
上坚持一件事非常easy,仅仅要你每天不断的朝着自己的目标出发,不论什么事情都不会挡着你。好了大道理不多说,谁都懂。那看看这个模板模式大家懂不懂了。
对于模板模式可能听起来非常吓人,事实上大家都用过。仅仅是不知道罢了。也非常easy。
从字面意思上看就是我写出一个模板。然后其它类直接继承它就行拥有模板类中的东西了,听起来像继承的定义。是的,就像如今开发一个论坛,为了可以开发速度更快,我们通常就是网上找一个模板下载下来,然后在模板基础上进行二次开发,道理一个样。
模板模型定义:定义一个操作中的算法的股价,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构就可以重定义该算法的某些特定步骤。
<<大话设计模式>>对于本章是以“小菜”面试解答选择题为故事展开的,意思是全部的选择题都是一样的,不一样的就是答题者的答案而已。那么开发这个程序的变化点就是答案。不变的就是题目。那好我们将题目封装到抽象类中,子类封装答案就可以,这就是模板模型。
废话不多说,照样上代码
1、模板抽象类,将子类共同拥有的代码封装起来
publicabstractclass AbstratorClass {
publicabstractvoid method1();
publicabstractvoid method2();
//模板方法。事实上就是将公共的东西放到抽象类里面去了。即子类继承一个共同的模板,降低代码重合,增强复用
publicvoid templateMethod(){
method1();
method2();
System.out.println("我是模板");
}
}
2、子类A和B
publicclass ClassA
extends AbstratorClass {
@Override
publicvoid method1() {
//
TODO Auto-generatedmethod stub
System.out.println("我是类A的方法1");
}
@Override
publicvoid method2() {
//
TODO Auto-generatedmethod stub
System.out.println("我是类A的方法2");
}
}
publicclass ClassB
extends AbstratorClass {
@Override
publicvoid method1() {
//
TODO Auto-generatedmethod stub
System.out.println("我是类B的方法1");
}
@Override
publicvoid method2() {
//
TODO Auto-generatedmethod stub
System.out.println("我是类B的方法2");
}
}
3、client调用
publicclass TemplateClient {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
//
TODO Auto-generatedmethod stub
AbstratorClass class1 =
new ClassA();
class1.templateMethod();
class1 = new ClassB();
class1.templateMethod();
}
}
事实上关键代码就一个地方,就是抽象类中封装的模板方法,而子类中的方法就是自己的逻辑了,想怎么写都能够了与其它子类无关,唯一同样的就是模板中的逻辑了。
总结:模板方法模式是通过把不变行为搬移到超类,去除子类中的反复代码来体现它的优势。事实上就是提供了一个非常好的代码复用平台,由于有时候,我们会遇到由一系列步骤构成的过程须要运行。这个过程从高层次上看是同样的。可是步骤的实现可能不同。这时候,模板方法模式该上场了………
附上代码:http://download.csdn.net/detail/jzhf2012/8102387
相关文章推荐
- ExtJS xtype大全【精】
- C# 继承
- 禁止Android 横屏竖屏切换 .
- maven修改项目JDK版本
- WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?
- iOS PAD编写 POPOver 使用tableviewcontroller的两种操作方式,代理和消息通知
- TJU-4107. A simple problem(贪心)
- ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件
- "ScrollView can host only one direct child"问题解决了
- nodejs【伪】入门教程
- 通过注释查找mysql的表名
- 列名 'Discriminator' 无效 解决方案
- 负载均衡(转载)
- 真假iPhone5s的辨别方法,苹果5改5s,iPhone5 改 iPhone5s 识别方法
- Hadoop入门进阶课程3--Hadoop2.X64位环境搭建
- 隐藏版权信息
- TPC-C基准测试简介
- ZigBee寄存器
- jersey 实现文件下载(以ms word 为例)
- 解决Ubuntu adb无法连接上android手机