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

目录

一、背景介绍

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

二、思路&方案

  • 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.软件工程:父类中算法骨架的统一,使得后期对于算法骨架的低维护得以落实

五、升华

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

相关推荐
欧恩意3 小时前
【Tools】Java反汇编工具推荐
java·汇编
geovindu3 小时前
python: Memento Pattern
开发语言·python·设计模式·备忘录模式
寻星探路3 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙3 小时前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
星河耀银海3 小时前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交3 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
紫陌涵光4 小时前
112. 路径总和
java·前端·算法
workflower4 小时前
多变量时间序列预测
java·hadoop·nosql·需求分析·big data·结对编程
Volunteer Technology5 小时前
DynamicTP动态线程池(四)
java·spring boot·后端·spring
野犬寒鸦5 小时前
从零起步学习并发编程 || 第九章:Future 类详解及CompletableFuture 类在项目实战中的应用
java·开发语言·jvm·数据库·后端·学习