一、概念
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。
二、实现
模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
抽象类:
public
abstract
class
AbstractClass {
// 基本方法
protected
abstract
void
doSomething();
// 基本方法
protected
abstract
void
doAnything();
// 模板方法
public
final
void
templateMethod() {
/*
* 调用基本方法,完成相关的逻辑
*/
this
.doSomething();
this
.doSomething();
}
}
具体类:
public
class
ConcreteClass1
extends
AbstractClass {
// 基本方法
protected
abstract
void
doSomething() {
// 业务逻辑
}
// 基本方法
protected
abstract
void
doAnything() {
// 业务逻辑
}
}
public
class
ConcreteClass2
extends
AbstractClass {
// 基本方法
protected
abstract
void
doSomething() {
// 业务逻辑
}
// 基本方法
protected
abstract
void
doAnything() {
// 业务逻辑
}
}
测试:
public
static
void
main(String[] args) {
AbstractClass class1 =
new
ConcreteClass1();
AbstractClass class2 =
new
ConcreteClass2();
// 调用模板方法
class1.templateMethod();
class2.templateMethod();
}
三、优缺点
模板方法多个子类有公有的方法,并且逻辑基本相同时,重复的算法,可以把核心算法设计为模板方法,周边的相关细节功能由各个子类实现
模板方法模式的优点:
1.封装不变部分,扩展可变部分
2.提取公共部分代码,便于维护
3.行为有父类控制,子类实现
模板方法模式的缺点
1.容易带来代码阅读的难度