Java学设计模式之模版模式
一、模板模式概念
1.1 什么是模板模式
模板模式是一种行为型设计模式,用于定义算法的框架结构,将具体步骤的实现延迟到子类中。这种模式促使子类在不改变算法结构的情况下重新定义算法中的某些步骤。
结构
模板模式通常包含以下几个要素:
-
AbstractClass(抽象类): 定义了算法的框架结构,其中包含了一个或多个抽象方法用于被子类实现,以及一个模板方法用于定义算法的框架。
-
ConcreteClass(具体类): 实现了抽象类中定义的抽象方法,完成了算法中的具体步骤。具体类可以有多个,每个具体类对应着不同的算法实现。
二、模板模式代码
2.1 抽象类
public abstract class CoffeeTemplate {
public final void makeCoffee() {
boilWater();
brewCoffeeGrinds();
pourInCup();
addCondiments();
}
abstract void brewCoffeeGrinds();
abstract void addCondiments();
void boilWater() {
System.out.println("煮开水");
}
void pourInCup() {
System.out.println("倒入杯中");
}
}
2.2 具体类
public class BlackCoffee extends CoffeeTemplate{
@Override
void brewCoffeeGrinds() {
System.out.println("过滤咖啡");
}
@Override
void addCondiments() {
System.out.println("加糖和牛奶");
}
}
public class Espresso extends CoffeeTemplate{
@Override
void brewCoffeeGrinds() {
System.out.println("萃取咖啡");
}
@Override
void addCondiments() {
System.out.println("加入巧克力糖浆");
}
}
2.3 测试类
public class TemplatePatternTest {
public static void main(String[] args) {
BlackCoffee blackCoffee = new BlackCoffee();
blackCoffee.makeCoffee();
System.out.println("----------------");
Espresso espresso = new Espresso();
espresso.makeCoffee();
// 输出:
// 煮开水
// 过滤咖啡
// 倒入杯中
// 加糖和牛奶
// ----------------
// 煮开水
// 萃取咖啡
// 倒入杯中
// 加入巧克力糖浆
}
}
三、总结
模板模式的优点包括:
- 提供了一个稳定的算法框架,便于代码复用和维护。
- 允许子类在不改变算法结构的情况下重新定义算法的某些步骤,增加了灵活性。
缺点包括:
- 可能会导致类的数量增加,因为每个具体实现都需要一个对应的子类。
- 子类对父类方法的实现不能完全自由,必须遵循父类定义的算法结构。