文章目录
- 前言
- 一、介绍
- 二、特点
- 三、详细介绍
- 1.核心组成
- 2.代码示例
- 3.优缺点
- 优点
- 缺点
- 4.使用场景
- 总结
前言
模板方法设计模式是行为型设计模式,主要是定义算法框架,并将一些步骤的实现延迟到子类,重新定义算法的步骤。
一、介绍
模板设计模式(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.使用场景
- 当需要将算法分解为一系列步骤,并且希望在不改变算法结构的前提下,允许子类改变某些步骤时。
- 当希望将某些操作的执行延迟到子类时。
- 当需要通过子类扩展或修改算法的特定步骤,以适应不同场景时。
总结
模板设计模式在实际开发中非常有用,特别是在需要执行一系列固定步骤,但某些步骤的具体实现需要由子类定制的场景中。它提高了代码的复用性和灵活性,同时保持了算法结构的一致性。