1.职责链模式 2.命令模式 3.迭代器模式 4.观察者模式 5.策略模式 6.模板方法模式 7.访问者模式 8.中介者模式 9.备忘录模式 10.状态模式
由于学习难度较大或相对用途较少 本章不会讲解7-10四种设计模式
接下来针对以上6种设计模式进行单独讲解
6 模板方法模式
6.1 定义
定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中。在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。
6.2 UML图
从上面UML图中可以看出
AbstractClass为抽象类,在抽象类中定义了一系列基本操作(Primitive Operations),这些基本操作可以是具体的,也可以是抽象的。每个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法,用于定义一个算法的框架。模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
ConcreteClass为具体子类,它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
6.3 代码实现
abstract class AbstractClass {
// 定义基本操作
public void primitiveOperation1() {
System.out.println("Primitive operation 1");
}
public abstract void primitiveOperation2();
// 定义模板方法
public void templateMethod() {
primitiveOperation1();
primitiveOperation2();
}
}
class ConcreteClass extends AbstractClass {
// 实现抽象基本操作
@Override
public void primitiveOperation2() {
System.out.println("Concrete primitive operation 2");
}
}
public class Main {
public static void main(String[] args) {
ConcreteClass concreteClass = new ConcreteClass();
concreteClass.templateMethod();
}
}