0
点赞
收藏
分享

微信扫一扫

14. 设计模式-模板模式

黄昏孤酒 2022-03-12 阅读 27

模板模式

一、基本介绍

  1. 模式方法模式,又叫模板模式,在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
  2. 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。
  3. 模板方法模式属于行为型模式。

二、原理类图

在这里插入图片描述

  1. AbstractClass抽象类,类中实现了模板方法,定义了算法的骨架,具体子类需要去实现其他的抽象方法。operation2,3,4
  2. ConcreteClass实现抽象方法operation2,3,4 以完成算法中的特定子类的相关步骤。

三、豆浆制作

1. 原理类图

在这里插入图片描述

2. 代码实现

  1. 抽象类,表示豆浆
// 抽象类,表示豆浆
public abstract class SoyaMilk {

    // 模板方法
    public final void make(){
        select();
        addCondiment();
        soak();
        beat();
    }

    // 选材料
    void select(){
        System.out.println("第一步,选择黄豆");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 添加不同的配料-抽象方法,子类实现
    abstract void addCondiment();

    // 浸泡
    void soak(){
        System.out.println("第三步,浸泡黄豆和配料。");
    }

    //
    void beat(){
        System.out.println("第四步,打豆浆");
    }

}
  1. RedBeanSoyaMilk
// 子类实现
public class RedBeanSoyaMilk extends SoyaMilk{
    @Override
    void addCondiment() {
        System.out.println("第二步,添加红豆");
    }
}
  1. PeanutSoyaMilk
// 子类实现
public class PeanutSoyaMilk extends SoyaMilk {

    @Override
    void addCondiment() {
        System.out.println("第二步,加入花生");
    }
}
  1. Client
public class Client {
    public static void main(String[] args) {
        // 制作红豆豆浆
        SoyaMilk soyaMilk = new RedBeanSoyaMilk();

        long startTime = System.currentTimeMillis(); //获取开始时间

        soyaMilk.make();//测试的代码段

        long endTime = System.currentTimeMillis(); //获取结束时间

        System.out.println("制作红豆豆浆,共花费时间" + (endTime - startTime));
    }
}

在这里插入图片描述

四、模板方法模式的注意事项和细节

  1. 基本思想是:算法只存在于一个地方,也就是在父类中,容易修改.需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改。
  2. 实现了最大化代码复用.父类的模板方法和已实现的某些步骤会被子类继承而直接使用。
  3. 即统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构保持不变,同时由子类提供部分步骤实现。
  4. 不足:每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大。
  5. 一般模板方法都加上final关键字,防止子类重写模板方法。
  6. 模板方法模式使用场景:当要完成在某个过程该过程要执行一系列步骤这一系列的步骤基本相同,但其个别步骤在实现时,可能不同,通常考虑用模板方法模式来处理。
举报

相关推荐

0 条评论