IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 设计模式——模板方法模式 -> 正文阅读

[数据结构与算法]设计模式——模板方法模式

定义

  • 定义算法框架,并将一些步骤的实现延迟到子类。

  • 通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。


目的

1、使用模版方法模式的目的是避免编写重复代码,以便开发人员可以专注于核心业务逻辑的实现

2、解决接口与接口实现类之间继承矛盾问题


类关系

  • AbstractTemplate(抽象模版):定义一系列抽象方法,或者实现的方法,又或者是钩子方法。即:定义流程
  • ConcreteTemplate(具体模版):实现父类抽象方法,基于本身不同的模版业务逻辑,实现不同的业务逻辑代码。即:抽象方法实现相同,内部逻辑不同

1、定义模板

// 工作流模板
public abstract class WorkFlow {

    final void doWorkFlow() {
        initial();
        firstProcess();
        secondProcess();
        end();
    }

    // 初始化
    void initial(){
        System.out.println("初始化");
    }

    // 处理一级业务逻辑
    abstract void firstProcess();

    // 处理二级业务逻辑(默认无实现,子类视情况进行覆盖)
    void secondProcess(){
    }

    // 结束处理
    void end(){
        System.out.println("结束处理");
    }
}
  • 钩子方法

在模板方法模式的抽象父类中,我们可以定义一个方法,它默认不做任何事,子类可以视情况覆盖它,该方法称为钩子方法。

2、实现具体模板

// 工作流种类 A
public class WorkFlowA extends WorkFlow{
    @Override
    void firstProcess() {
        System.out.println("WorkFlowA 处理一级业务");
    }

    @Override
    void secondProcess() {
        System.out.println("WorkFlowA 处理二级业务");
    }
}
// 工作流种类 B
public class WorkFlowB extends WorkFlow{

    @Override
    void firstProcess() {
        System.out.println("WorkFlowB 处理一级业务");
    }
}

3、测试

public class TemplateClient {

    public static void main(String[] args) {
        WorkFlow workFlowA = new WorkFlowA();
        WorkFlow workFlowB = new WorkFlowB();
        workFlowA.doWorkFlow();
        workFlowB.doWorkFlow();
    }
}

使用场景

1、多个子类有共有的方法,并且逻辑基本相同。

2、重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。

3、重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数约束其行为。


参考资料

模板方法 (qq.com)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:11:23  更:2021-09-30 12:13:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 10:24:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码