设计模式:模板方法设计模式

定义

模板方法设计模式又叫做模板模式,指定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得字类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤,属于行为型设计模式。

使用场景:

  • 一次性实现一个算法的不变部分,并将可变的行为留给子类实现。
  • 各个类中公共的行为被提取出来,集中到一个公共的父类中,避免重复。

场景一

需求:需要喝一杯龙井

步骤如下:

public class MakeTea {

    public void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("烧水");
    }

    private void step2(){
        System.out.println("茶叶放在杯子中");
    }

    private void step3(){
        System.out.println("将开水倒入杯子");
    }

    private void step4(){
        System.out.println("过一段时间");
    }

    private void step5(){
        System.out.println("喝茶");
    }

}

测试:

    public static void main(String[] args) {
        MakeTea makeTea = new MakeTea();
        makeTea.start();
    }

场景二

需求:现在又需要喝一杯咖啡

步骤如下:

public class MakeCoffee {

    public void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("烧水");
    }

    private void step2(){
        System.out.println("咖啡粉放在杯子中");
    }

    private void step3(){
        System.out.println("将开水倒入杯子");
    }

    private void step4(){
        System.out.println("过一段时间");
    }

    private void step5(){
        System.out.println("喝咖啡");
    }

}

我们发现喝咖啡和喝茶流程步骤基本一致,但小细节不一样,我们可以将其抽取到一个类中(其实我们平时开发时有时候用到了模板方法模式,但是我们不知道这是模板方法模式)

模板方法模式写法

首先我们对上述需求创建模板,把步骤流程方法和相同的步骤给封装到模板中,以后我们就跟着模板来就行了。(创建方法的模板,子类跟着模板来就可以了)

public abstract class Make {

    public final void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("烧水");
    }

    abstract void step2();

    private void step3(){
        System.out.println("将开水倒入杯子");
    }

    private void step4(){
        System.out.println("过一段时间");
    }

    abstract void step5();
}

创建喝咖啡的实现类

public class MakeCoffee extends Make{
    @Override
    void step2() {
        System.out.println("咖啡粉放在杯子中");
    }

    @Override
    void step5() {
        System.out.println("喝咖啡");
    }
}

类图:

image-20201226220125055

测试:

    public static void main(String[] args) {
        Make make = new MakeCoffee();
        make.start();
    }

image-20201226215712826

以上就是模板方法设计模式的具体实现,理解也没有难度。

原文地址:https://www.cnblogs.com/wwjj4811/p/14194636.html