模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[DP]

模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。
- //首先,我们定义一个抽象类AbstractClass,它包含了一个模版方法templateMethod和一些抽象方
- //法primitiveOperation1和primitiveOperation2:
- public abstract class AbstractClass {
-
- // 模版方法
- public final void templateMethod() {
- System.out.println("执行步骤 1:");
- primitiveOperation1();
-
- System.out.println("执行步骤 2:");
- primitiveOperation2();
- }
-
- // 抽象方法,由子类实现
- protected abstract void primitiveOperation1();
-
- // 抽象方法,由子类实现
- protected abstract void primitiveOperation2();
- }
- //然后,我们创建两个子类ConcreteClassA和ConcreteClassB,它们分别实现了抽象类中的抽象方法:
- public class ConcreteClassA extends AbstractClass {
-
- @Override
- protected void primitiveOperation1() {
- System.out.println("具体类 A 的步骤 1 实现");
- }
-
- @Override
- protected void primitiveOperation2() {
- System.out.println("具体类 A 的步骤 2 实现");
- }
- }
-
- public class ConcreteClassB extends AbstractClass {
-
- @Override
- protected void primitiveOperation1() {
- System.out.println("具体类 B 的步骤 1 实现");
- }
-
- @Override
- protected void primitiveOperation2() {
- System.out.println("具体类 B 的步骤 2 实现");
- }
- }
- //最后,我们编写客户端代码来演示如何使用模版方法模式:
- public class Client {
-
- public static void main(String[] args) {
- AbstractClass abstractClassA = new ConcreteClassA();
- AbstractClass abstractClassB = new ConcreteClassB();
-
- // 调用模版方法
- abstractClassA.templateMethod();
- abstractClassB.templateMethod();
- }
- }