【设计模式】模板方法模式

  • 模板方法模式是 行为设计模式 ,他在一个方法中定了流程骨架,将某些特定的步骤延迟到子类进行实现,该模式允许子类在不改变流程的情况下,重新定义一些特定的方法

    父类控制流程,子类负责具体的实现

核心组件

  • 抽象模板类
    • 定义模板方法
    • 生命抽象操作
    • 包含默认实现
java 复制代码
public abstract  class TemplateAbstract{

    public void printValue(int a,int b){
        int value = execute(a,b);
        System.out.println("execute value = "+value);
    }

    protected abstract int execute(int a,int b);
}
  • 具体子类
    • 继承抽象父类,并实现抽象方法,
    • 不改变流程结构
java 复制代码
public class Add extends TemplateAbstract{

	@Override
	public int execute(int a,int b){
			return a+b;
	}

}

类图

  • Client:调用类
  • TemplateAbstract :抽象模板类
  • Add :实现类-加法
  • Subtraction :实现类-减法
java 复制代码
public class Client {

    public static void main(String[] args) {
        TemplateAbstract add = new Add();
        
        TemplateAbstract sub = new Subtraction();
        
        TemplateAbstract mul = new Multiplication();
        
        add.printValue(1,2);
        sub.printValue(3,4);
        mul.printValue(5,6);
    }
    
}

public abstract  class TemplateAbstract{

    public void printValue(int a,int b){
        int value = execute(a,b);
        System.out.println("execute value = "+value);
    }

    protected abstract int execute(int a,int b);
}

public class Add  extends TemplateAbstract{
    @Override
    protected int execute(int a, int b) {
        return a+b;
    }
}

public class Subtraction extends TemplateAbstract{

    @Override
    protected int execute(int a, int b) {
        return a-b;
    }
}

public class Multiplication extends TemplateAbstract {
    @Override
    protected int execute(int a, int b) {
        return a*b;
    }
}

模式的优缺点

优点

  • 代码复用最大化,将公共的流程抽象到父类,避免子类重复编写相同代码
  • 明确业务流程性,通过将不建议修改的方法 使用 final 进行修饰,防止破坏核心流程逻辑

缺点

  • 耦合性过大,通过继承父类来完成流程,如果父类添加了额外的抽象方法,会影响所有子类
  • 流程不透明:对于第一次重新相关子类的人来说需要了解下整体运行流程

总结

模板方法模式类似于流水线工作,指定了标准的流程又提供了个性化的空间,模板方法模式是比较常用的设计模式在主流框架中都能找到相关的使用,掌握模板方法可以让您在代码规范和灵活性之间找到相对的平衡

相关推荐
XiaoFan0125 分钟前
免密批量抓取日志并集中输出
java·linux·服务器
顾北1212 分钟前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo
我命由我1234518 分钟前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
赛姐在努力.20 分钟前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
yxc_inspire23 分钟前
Java学习第二天
java·面向对象
毕设源码-赖学姐25 分钟前
【开题答辩全过程】以 基于net超市销售管理系统为例,包含答辩的问题和答案
java
昀贝35 分钟前
IDEA启动SpringBoot项目时报错:命令行过长
java·spring boot·intellij-idea
roman_日积跬步-终至千里1 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦1 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli71 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源