设计模式与应用:模板方法模式

本文介绍模板方法模式,介绍基本应用场景和核心设计思路

简介

Template Method 模板方法模式,是行为模式之一

把具有特定步骤算法中的某些必要处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为
重点:步骤相同,合并执行;细节不同,分治实现。

应用场景

  • 具有统一的操作步骤或操作过程
  • 具有不同的操作细节
  • 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

模板方法模式结构图

这里写图片描述

角色和职责

  • AbstractClass:抽象类的父类
  • ConcreteClass:具体的实现子类
  • templateMethod():模板方法
  • method1() 与 method()2:具体步骤方法

实现

这里以造车为例,设计一个造车的步骤模板。然后不同的车型有不同的实现细节。

demo

模板类

package com.mym.designmodel.template;

/**
 * 职责:抽象类的父类。模板类
 */
public abstract class MakeCar {

    public abstract void makeHead();//模板步骤方法

    public abstract void makeBody();//模板步骤方法

    public abstract void makeTail();//模板步骤方法

    //执行方法
    public void make(){
        this.makeHead();
        this.makeBody();
        this.makeTail();
    }

}

其中一个实现子类1

package com.mym.designmodel.template;

/**
 * 职责:具体实现子类
 */
public class MakeBus extends MakeCar {
    @Override
    public void makeHead() {
        System.out.println("造Bus车头");
    }

    @Override
    public void makeBody() {
        System.out.println("造Bus车身");
    }

    @Override
    public void makeTail() {
        System.out.println("造Bus车尾");
    }
}

其中一个实现子类2

package com.mym.designmodel.template;

/**
 * 职责:具体实现子类
 */
public class MakeCart extends MakeCar{
    @Override
    public void makeHead() {
        System.out.println("造Cart车头");
    }

    @Override
    public void makeBody() {
        System.out.println("造Cart车身");
    }

    @Override
    public void makeTail() {
        System.out.println("造Cart车尾");
    }
}

测试

package com.mym.designmodel.template;

/**
 * 测试使用
 */
public class MainClass {

    public static void main(String[] args) {
        MakeCar bus = new MakeBus();
        bus.make();
        System.out.println("----------");
        MakeCar cart = new MakeCart();
        cart.make();
    }
}

输出

造Bus车头
造Bus车身
造Bus车尾
----------
造Cart车头
造Cart车身
造Cart车尾

总结:使用模板方法模式重点在于模板设计和职责的明确上。

猜你喜欢

转载自blog.csdn.net/maoyuanming0806/article/details/80180901