设计模式再探——模板方法模式

目录

一、背景介绍

最近公司在做颗粒业务的时候,子类中有很多公共的行为,使得维护非常繁琐;于是就想到了设计模式中的模板方法模式。

二、思路&方案

  • 1.模板方法模式简介
  • 2.模板方法模式的类图
  • 3.模板方法模式代码
  • 4.模板方法模式中的父类为抽象类,为什么不是接口?
  • 5.模板方法模式方法级别的单一职责

三、过程

1.模板方法模式简介

模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

2.模板方法模式的类图

3.模板方法模式代码

java 复制代码
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:29
 */
public class Client {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.TemplateMethod();
    }
}
java 复制代码
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:26
 */
public abstract class AbstractClass {
    public abstract void PrimitiveOperation1();
    public abstract void PrimitiveOperation2();

    public void TemplateMethod(){
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
}
java 复制代码
package com.a7DesignPattern.a3BehaviorType.a02TemplateMethod;

/**
 * 功能描述:
 *
 * @Author:makang
 * @Date: 2021/5/26 17:28
 */
public class ConcreteClass extends AbstractClass{
    @Override
    public void PrimitiveOperation1() {
        System.out.println("AbstractClass 中PrimitiveOperation1方法具体的实现");
    }

    @Override
    public void PrimitiveOperation2() {
        System.out.println("AbstractClass 中PrimitiveOperation2方法具体的实现");
    }
}

4.模板方法模式中的父类为抽象类,为什么不是接口?

答:1.要在父类中定义算法骨架,而这个算法骨架的实现是需要通过抽象类的普通方法来实现的 2.接口是对行为的抽象,如果用接口就与模板方法模式定义中的将一些步骤延迟到子类相悖了

5.模板方法模式中方法级别的单一职责

方法要足够的单一,这样才使得算法的骨架得以通过组合单一的方法实现;另外还使得可将单一的方法延迟到子类去实现

四、总结

  • 1.具体模式:父类实现算法骨架的复用,子类实现部分步骤的不同
  • 2.七大原则:对于子类而言,只需要存在和重新定义需要它管理的特定步骤即可;更符合单一职责
  • 3.软件工程:父类中算法骨架的统一,使得后期对于算法骨架的低维护得以落实

五、升华

对于软件工程的落地,七大原则的遵守,特定场景的完美实现。

相关推荐
奋进的芋圆1 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin1 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20051 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉2 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国2 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882482 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈3 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_993 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹3 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理
专注_每天进步一点点3 小时前
【java开发】写接口文档的札记
java·开发语言