模板模式(学习笔记)
2012-03-31 21:40
288 查看
模板模式
模板模式看起来很简单,看起来。。。。
先看一下uml图吧:
这不就是一个继承么?!子类完成超类的抽象方法?!
重要的是templeteMethod();可以看到,它规定的operation1与operation2的执行顺序。
定义:定义一个操作中的算法(也就是上图中的templeteMethod方法)的骨架,而将一些步骤延迟到子类中。
模板方法可以说,使用了代码复用最常用的方式——继承,显然,这么设计,减少了工作量。更重要的是,它给了某种算法(templeteMethod方法)制定了约束,确定这个算法所使用的操作的顺序。而具体的某种操作如何实现可以留给子类。
好处:
1. 一次性实现一个算法的不变部分,并将可变行为留给子类来实现。
2. 集中各个子类中的公共行为并将其置入一个公共父类中,以避免代码重复。
3. 为控制子类扩展超类操作的方式,可定义在特定点调用“钩子”操作的模板方法,以允许在这些点进行扩展
注意(或者说是是实现技巧):
1.必须被子类重载的操作应定义为抽象的
2.如果模板方法本身不应被子类重载,应定义为final的
3.为允许子类在一个算法操作的特定点插入代码,将“钩子”操作插入模板方法。这些钩子操作可能默认为什么也不做
4. 使子类必须重载的操作数量最少化,否则开发者会感觉模板方法很乏味。
5.在模板方法中,父类调用子类的操作而不是相反。这是一种反向的控制结构,有时称作“好莱坞法则”,即“别找我们,我们找你”
例子:
最好的例子就是,算法老师讲算法时,总是给你一些伪代码,甚至是自然语言!!你就可以把这些伪代码抽象为一个模板函数。然后定义子类去具体实现。
模板模式看起来很简单,看起来。。。。
先看一下uml图吧:
这不就是一个继承么?!子类完成超类的抽象方法?!
重要的是templeteMethod();可以看到,它规定的operation1与operation2的执行顺序。
定义:定义一个操作中的算法(也就是上图中的templeteMethod方法)的骨架,而将一些步骤延迟到子类中。
模板方法可以说,使用了代码复用最常用的方式——继承,显然,这么设计,减少了工作量。更重要的是,它给了某种算法(templeteMethod方法)制定了约束,确定这个算法所使用的操作的顺序。而具体的某种操作如何实现可以留给子类。
好处:
1. 一次性实现一个算法的不变部分,并将可变行为留给子类来实现。
2. 集中各个子类中的公共行为并将其置入一个公共父类中,以避免代码重复。
3. 为控制子类扩展超类操作的方式,可定义在特定点调用“钩子”操作的模板方法,以允许在这些点进行扩展
注意(或者说是是实现技巧):
1.必须被子类重载的操作应定义为抽象的
2.如果模板方法本身不应被子类重载,应定义为final的
3.为允许子类在一个算法操作的特定点插入代码,将“钩子”操作插入模板方法。这些钩子操作可能默认为什么也不做
4. 使子类必须重载的操作数量最少化,否则开发者会感觉模板方法很乏味。
5.在模板方法中,父类调用子类的操作而不是相反。这是一种反向的控制结构,有时称作“好莱坞法则”,即“别找我们,我们找你”
例子:
最好的例子就是,算法老师讲算法时,总是给你一些伪代码,甚至是自然语言!!你就可以把这些伪代码抽象为一个模板函数。然后定义子类去具体实现。
相关文章推荐
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 学习笔记——JAVA设计模式<19>模板方法模式
- 金庸小说考试之模板方法模式学习笔记[C++版]
- 【学习笔记20】java面向对象-权限修饰符、模板模式
- [转]C++ Template学习笔记之函数模板(5)——模板编译模式
- java 设计模式 学习笔记(9) 模板方法模式
- C++ Template学习笔记之函数模板(5)——模板编译模式
- 模板方法模式(Template Method Pattern)学习笔记
- 设计模式学习笔记——模板方法模式
- Java学习笔记之抽象(abstract)与模板方法设计模式
- 《 Head first设计模式 》学习笔记 – 模板方法模式
- 设计模式学习笔记-模板方法模式
- 【学习笔记javascript设计模式与开发实践(模板方法模式)----11】
- HeadFirst 设计模式学习笔记8--模板方法模式
- Head First设计模式学习笔记-------(9)模板方法模式
- Design Pattern学习笔记 --- 模板方法(Template Method)模式
- 设计模式学习笔记(七)之模板方法模式(Template Method)
- 设计模式学习笔记(十八:模板方法模式)
- Design Pattern学习笔记之模板方法模式(the Template Method Pattern)