文章目录
- 模板方法设计模式
- 模板方法的设计原则
- 模板方法设计模式组成部分
- 代码实现
- 抽象类实现
- 具体实现类
- 执行
模板方法设计模式
模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变算法结构的情况下,重新定义算法中的某些步骤。
这种设计模式的主要目的是让某些方法的具体实现推迟到子类中去完成,提供一种代码复用的机制。
模板方法的设计原则
1.单一职责:一个类和方法只做一件事。
2.开闭原则:对修改关闭,对扩展开发。
3.里氏替换原则:子类可扩展新方法,但不可修改父类已有方法(父类已提供了具体实现的方法)。
4.依赖倒置:依赖于抽象,而非具体实现,即面向接口编程(如方法参数,类属性使用接口声明,这样可接收任何子类)。
5.接口隔离:使用多个隔离的接口定义抽象,降低耦合。
6.最少知道/迪米特原则:降低类之间的依赖,聚合,组合等。
模板方法设计模式组成部分
抽象类(Abstract Class):
包含了模版方法及其所需的基本操作方法。
模版方法定义了算法的骨架,通常是由一些基本操作方法组成的步骤。
基本操作方法可以是抽象的(需要子类实现)或具体的(提供默认实现)。
具体子类(Concrete Class):
实现了抽象类中的基本操作方法。
通过重写基本操作方法,子类可以定制算法的某些步骤。
代码实现
抽象类实现
// 抽象类,定义了制作饮料的算法骨架
abstract class Beverage {
// 模版方法,定义了制作饮料的步骤
public final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 基本操作方法
protected abstract void brew(); // 子类实现
protected abstract void addCondiments(); // 子类实现
private void boilWater() {
System.out.println("Boiling water");
}
private void pourInCup() {
System.out.println("Pouring into cup");
}
}
具体实现类
// 具体子类,具体实现制作茶的步骤
class Tea extends Beverage {
@Override
protected void brew() {
System.out.println("Steeping the tea");
}
@Override
protected void addCondiments() {
System.out.println("Adding lemon");
}
}
// 具体子类,具体实现制作咖啡的步骤
class Coffee extends Beverage {
@Override
protected void brew() {
System.out.println("Dripping coffee through filter");
}
@Override
protected void addCondiments() {
System.out.println("Adding sugar and milk");
}
}
执行
// 客户端代码
public class TemplateMethodPatternDemo {
public static void main(String[] args) {
Beverage tea = new Tea();
tea.prepareRecipe();
Beverage coffee = new Coffee();
coffee.prepareRecipe();
}
}