1 定义
定义一个算法中的操作框架,而将算法中的一些步骤进行抽象,使这些步骤延迟到子类中去实现,从而实现子类不改变算放结构就可以重定义算法的某些特定步骤。
2 类图及实例
通过定义的描述我们知道了模板方法模式中的抽象类有一些模板方法,这些模板方法中会调用一些基本方法(抽象方法),而这些基本方法的实现就交给了子类来完成。

具体代码实现如下:
/**
* 抽象父类
*/
abstract class AbstractClass{
/**
* 基本方法1
*/
protected abstract void basicMethodOne();
/**
* 基本方法2
*/
protected abstract void basicMethodTwo();
/**
* 模板方法
*/
public final void templateMethod(){
basicMethodOne();
basicMethodTwo();
}
}
class concreteClass1 extends AbstractClass{
@Override
protected void basicMethodOne() {
System.out.println("I'm basicMethodOne in concreteClass1");
}
@Override
protected void basicMethodTwo() {
System.out.println("I'm basicMethodTwo in concreteClass1");
}
}
class concreteClass2 extends AbstractClass{
@Override
protected void basicMethodOne() {
System.out.println("I'm basicMethodOne in concreteClass2");
}
@Override
protected void basicMethodTwo() {
System.out.println("I'm basicMethodTwo in concreteClass2");
}
}
3 模板方法模式的优缺点
(1)优点
- 封装不变部分,扩展可变部分。
- 提取公共部分代码便于维护。
- 行为由父类控制,子类实现。
(2)缺点
按照一般的设计思路,抽象类负责完成最基础的方法,而具体的方法使用及实现由子类完成。而模板方法模式的设计思路正好相反,这样会增加代码的阅读难度。
4 使用场景
(1)多个子类有相同的方法,并且基本逻辑相同。
(2)重要的、复杂的算法,可以将核心算法抽象成模板,然后子类实现周边算法。
(3)针对重构的时候,可以将相同的算法抽象成模板,针对不同的部分由子类实现。

本文介绍了一种设计模式——模板方法模式,它定义了一个算法的操作框架,允许子类重定义某些步骤而不改变整体结构。适用于多个子类有相同方法且基本逻辑相同的情况。
1102

被折叠的 条评论
为什么被折叠?



