文章目录
模版方法模式
一、定义与概念
模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、作用与优势
- 代码复用
- 模板方法模式将通用的算法框架提取到父类中,子类只需要实现特定的步骤,大大提高了代码的复用性。
- 避免了重复编写相同的代码逻辑,减少了开发工作量。
- 算法框架固定
- 确保了算法的整体结构稳定,不会因为个别子类的实现而改变。
- 对于复杂的算法,通过模板方法可以更好地控制和管理整个流程。
- 易于扩展
- 当需要增加新的功能或修改特定步骤时,可以通过创建新的子类来实现,不会影响到其他已有的代码。
- 符合开闭原则,即对扩展开放,对修改关闭。
简单实现 - 炒菜
以下是以炒菜为例的简单模版方法模式实现:
1、定义模板类,cookDish
方法为模版方法。
java
public abstract class AbstractCookingRecipe {
public final void cookDish() {
heatOil();
pourIngredients();
stirFry();
addSeasonings();
dishOut();
}
abstract void heatOil();
abstract void pourIngredients();
abstract void stirFry();
abstract void addSeasonings();
abstract void dishOut();
}
2、继承模版类,实现抽象方法
java
public class StirFryVegetables extends AbstractCookingRecipe {
@Override
void heatOil() {
System.out.println("在锅中倒入适量油,加热至七成热。");
}
@Override
void pourIngredients() {
System.out.println("将洗净的蔬菜倒入锅中。");
}
@Override
void stirFry() {
System.out.println("不断翻炒蔬菜,使其均匀受热。");
}
@Override
void addSeasonings() {
System.out.println("加入适量盐、生抽等调料。");
}
@Override
void dishOut() {
System.out.println("将炒好的蔬菜出锅装盘。");
}
}
3、测试使用
java
public class TemplateTest {
public static void main(String[] args) {
new StirFryVegetables().cookDish();
}
}
结果如下:
bash
在锅中倒入适量油,加热至七成热。
将洗净的蔬菜倒入锅中。
不断翻炒蔬菜,使其均匀受热。
加入适量盐、生抽等调料。
将炒好的蔬菜出锅装盘。
总结
在这个实现中,抽象类AbstractCookingRecipe
定义了炒菜的通用流程,具体的炒菜类(如StirFryVegetables)实现了这些抽象方法,从而按照特定的步骤完成炒菜操作。这样可以方便地扩展不同的炒菜菜谱,只需要继承抽象类并实现具体的方法即可。