当前位置: 首页 > news >正文

设计模式-模板方法模式

目录

1.简单介绍

2.角色功能

3.代码实现

4.优缺点

1.简单介绍

  • 模板方法模式(Template Method):定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤,属于行为型模式​​​​​​​
  • 应用场景:
    • 有多个子类共有逻辑相同的方法,可以考虑作为模板方法
    • 设计一个系统时知道了算法所需的关键步骤,且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,可以延迟到子类进行完成

2.角色功能

  • 抽象模板(Abstract Template):定义一个模板方法,这个模板方法一般是一个具体方法,给出一个顶级算法骨架,而逻辑骨架的组成步骤在相应的抽象操作中,推迟到子类实现 
  • 基本方法:是整个算法中的一个步骤,包括抽象方法和具体方法
    • 抽象方法:在抽象类中申明,由具体子类实现。
    • 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它
  • 具体模板(Concrete Template):实现父类所定义的一个或多个抽象方法,它们是一个顶级算法逻辑的组成步骤

3.代码实现

抽象模板

/*** 咸鱼反过来还是咸的~** @author: 会敲代码的小张* @date: 2024/9/12 10:15** 抽象模板*/
public abstract class AbstractProject {/*** 定义模板方法,声明final,防止子类覆盖他*/public final void processProject() {review();design();coding();test();online();}public void review() {System.out.println("项目需求评审~");}public void design() {System.out.println("项目需求设计~");}//抽象方法,由子类具体实现public abstract void coding();//抽象方法,由子类具体实现public abstract void test();//抽象方法,由子类具体实现public abstract void online();
}

具体模板


/*** 咸鱼反过来还是咸的~** @author: 会敲代码的小张* @date: 2024/9/12 10:20** 具体的模板~1实现父类定义的抽象方法*/
public class PayServiceProject extends AbstractProject{@Overridepublic void coding() {System.out.println("代码编写~一个月");}@Overridepublic void test() {System.out.println("功能测试,压力测试");}@Overridepublic void online() {System.out.println("全量上线");}
}/*** 咸鱼反过来还是咸的~** @author: 会敲代码的小张* @date: 2024/9/12 10:30* 具体的模板~2实现父类定义的抽象方法*/
public class UserServiceProject extends AbstractProject{@Overridepublic void coding() {System.out.println("代码编写~10天");}@Overridepublic void test() {System.out.println("功能测试");}@Overridepublic void online() {System.out.println("灰度发布");}
}

测试

/*** 咸鱼反过来还是咸的~** @author: 会敲代码的小张* @date: 2024/9/12 10:31*/
public class MyTest {public static void main(String[] args) {AbstractProject project;System.out.println("++++++++++++++++++支付模式测试++++++++++++++++++");project = new PayServiceProject();project.processProject();System.out.println("++++++++++++++++++用户模式测试++++++++++++++++++");project = new UserServiceProject();project.processProject();}
}

4.优缺点

  • 优点:
    • 扩展性好,对不变的代码进行封装,对可变的进行扩展,符合开闭原则
    • 提高代码复用性 将相同部分的代码放在抽象的父类中,将不同的代码放入不同的子类中
    • 通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制
  • 缺点: 
    • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,会使系统变得复杂

http://www.mrgr.cn/news/25022.html

相关文章:

  • C++基础知识13:结构体内存管理
  • STL容器真的好用吗
  • 海思SD3403(21AP10, 108DC2910 )4K60 的 ISP 图像处理能力,4Tops INT8算力
  • 动态规划01背包问题
  • 鸿蒙-沉浸式pc端失效
  • dropbear交叉编译
  • 【linux-Day2】linux下的基本指令
  • docker_快速部署flask架构下的web容器
  • 基于“硅基”的AI数字人要闻直播
  • 最小二乘估计
  • qt绘制时钟
  • QGIS 如何连接空间库,并实时编辑空间表?编辑后库表如何刷新,保证是最新数据?
  • 拱式桥安全结构健康监测解决方案
  • 机器学习 第14章 概率图模型
  • 【Linux 从基础到进阶】自动化部署工具(Jenkins、GitLab CI/CD)
  • 信息安全基础知识-1
  • shell脚本控制语句
  • 使用 SpEL 替换中文时出现了 java.lang.IllegalStateException: Cannot handle 错误
  • 蓄电池制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • ICM20948 DMP代码详解(15)