模板方法模式
来源:互联网 发布:c 函数定义数组长度 编辑:程序博客网 时间:2024/05/17 00:59
一、什么是模板方法模式?
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
涉及到的角色:
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
类图
代码类:
AbstractClass : 抽象类,定义并实现一个模板方法。这个模板方法定义了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类去实现。顶级逻辑也有可能调用一些具体方法
abstract class AbstractClass {
public abstract void PrimitiveOperation1();
public abstract void PrimitiveOperation2();
public void TemplateMethod() {
PrimitiveOperation1();
PrimitiveOperation2();
}
}
ConcreteClass : 实现实现父类所定义的一个或多个抽象方法。
class ConcreteClassA extends AbstractClass {
@Override
public void PrimitiveOperation1() {
System.out.println("具体A类方法1");
}
@Override
public void PrimitiveOperation2() {
System.out.println("具体A类方法2");
}
}
class ConcreteClassB extends AbstractClass {
@Override
public void PrimitiveOperation1() {
System.out.println("具体B类方法1");
}
@Override
public void PrimitiveOperation2() {
System.out.println("具体B类方法2");
}
}
测试代码
public class TemplateMethodPattern {
public static void main(String[] args) {
AbstractClass objA = new ConcreteClassA();
AbstractClass objB = new ConcreteClassB();
objA.TemplateMethod();
objB.TemplateMethod();
}
}
二、模板方法模式优缺点
1、模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
2、子类实现算法的某些细节,有助于算法的扩展。
3、通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
4、每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
三、使用场景
模板方法可以用于一次性实现一个算法的不变的部分,并将可变的部分留给子类去实现;子类的公共代码部分应该被提炼到父类中去写好,防止代码重复编写;控制子类的扩展,模板方法只允许在特定点调用钩子函数,这样就只允许在这些点进行扩展。
参考文章:点击打开链接
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- VS 插件推荐
- 【2】广义向量空间模型
- leetcode No54. Spiral Matrix
- 支付
- hdu 5745(bitset)
- 模板方法模式
- Android多屏幕适配相关
- Swift基础(三十三)Photos.framework框架
- 【POJ】3268 - Silver Cow Party(dijkstra & 优先队列 & 好题)
- 简单行为树(备忘)
- 生姜-本草
- IOS APP发布-The certificate used to sign "XXX" has either expired or has been revoked
- 随书实验须知
- Mac OS X 下开发者常用的几个环境变量配置