前言

模板方法设计模式是行为型设计模式,主要是定义算法框架,并将一些步骤的实现延迟到子类,重新定义算法的步骤。


一、介绍

模板设计模式(Template Pattern)是一种行为型设计模式,它在超类中定义了一个算法的框架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法的某些特定步骤。

二、特点

模板方法设计模式主要有以下特点:

  • 算法框架:在超类中定义一个或多个模板方法,这些方法定义了算法的骨架,但具体的实现步骤可以延迟到子类中。
  • 钩子方法:在超类中定义的方法,可以被子类覆盖,以提供特定的行为。
  • 抽象方法:在超类中定义的方法,子类必须实现这些方法。
  • 具体方法:在超类中定义的方法,子类可以继承并使用这些方法,也可以覆盖它们。
  • 扩展性:模板设计模式提高了代码的扩展性,允许在子类中扩展或修改算法的特定步骤。
  • 灵活性:通过模板方法,可以在运行时动态地改变算法的行为。

三、详细介绍

1.核心组成

  • AbstractClass(抽象类):定义了模板方法和钩子方法,以及可能的抽象方法和具体方法。
  • ConcreteClass(具体类):继承自抽象类,实现抽象方法,并可能覆盖钩子方法和具体方法。

在这里插入图片描述

2.代码示例

抽象模板类

/**
 * 抽象模板
 * 电脑组装
 */
public abstract class ComputerAssemble {

    /**
     * 组装
     */
    public final void assemble(){
        step1();
        step2();
        step3();
        step4();
        step5();
        step6();
    }

    /**
     * 准备工作
     */
    public void step1(){
        System.out.println("准备工具与零件");
    }

    /**
     * 安装显示屏
     */
    public abstract void step2();


    /**
     * 内存
     */
    public abstract void step3();

    /**
     * 硬盘
     */
    public abstract void step4();

    /**
     * 组装主机
     */
    public void step5(){
        System.out.println("组装主机");
    }

    public void step6(){
        System.out.println("组装电脑");
    }
}

具体实现类

/**
 * 具体模板
 * 高配
 */
public class HighComputer extends ComputerAssemble{
    @Override
    public void step2() {
        System.out.println("安装24寸4K显示屏");
    }

    @Override
    public void step3() {
        System.out.println("安装32G内存条");
    }

    @Override
    public void step4() {
        System.out.println("安装1T固态硬盘");
    }
}
/**
 * 具体模板
 * 低配电脑
 */
public class LowComputer extends ComputerAssemble{
    @Override
    public void step2() {
        System.out.println("安装16寸2K显示屏");
    }

    @Override
    public void step3() {
        System.out.println("安装8G内存条");
    }

    @Override
    public void step4() {
        System.out.println("安装1T机械硬盘");
    }
}

测试类

/**
 * 测试类
 */
public class TemplateTest {

    public static void main(String[] args) {
        ComputerAssemble low = new LowComputer();
        low.assemble();
        System.out.println("=================");
        ComputerAssemble high=new HighComputer();
        high.assemble();

    }
}

结果
在这里插入图片描述

3.优缺点

优点

  • 扩展性好,对不变的代码进行封装,对可变的进行扩展,符合开闭原则。

缺点

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,会使系统变得复杂。

4.使用场景

  • 当需要将算法分解为一系列步骤,并且希望在不改变算法结构的前提下,允许子类改变某些步骤时。
  • 当希望将某些操作的执行延迟到子类时。
  • 当需要通过子类扩展或修改算法的特定步骤,以适应不同场景时。

总结

模板设计模式在实际开发中非常有用,特别是在需要执行一系列固定步骤,但某些步骤的具体实现需要由子类定制的场景中。它提高了代码的复用性和灵活性,同时保持了算法结构的一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部