• 23种设计模式之模板方法模式(Template Method Pattern)


    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的模板方法模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
    如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
    小威在此先感谢各位大佬啦~~🤞🤞
    在这里插入图片描述

    🏠个人主页:小威要向诸佬学习呀
    🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
    目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

    💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

    以下正文开始
    在这里插入图片描述

    模板方法模式是一种行为型设计模式,它定义了一个算法骨架,将某些算法步骤的实现延迟到子类中。这样可以使得算法的框架不被修改,但是具体的实现可以根据需要进行调整。

    模板方法模式中,我们通常会定义一个抽象类,它包含了一个模板方法和一些抽象方法,这些抽象方法通常由子类来实现。具体过程如下:

    定义抽象类(Abstract Class):抽象类中定义了一些抽象方法和一个模板方法。抽象方法通常是一些具体步骤,而模板方法则定义了算法的大致流程。由于抽象类中的某些方法需要由子类来实现,因此它们往往是 protected 访问权限。

    定义具体子类(Concrete Class):具体子类继承自抽象类,并实现其中的抽象方法。在具体子类中,我们可以针对需要实现的具体步骤编写相应的代码。

    下面使用一个简单的例子来介绍下模板方法模式:

    假设我们要实现一个对一个数组进行排序的程序,我们可以定义一个抽象类 ArraySorter,其中包含一个模板方法 sort,这个方法包含以下步骤:检查数组是否为空、确定排序算法、调用具体的排序算法。我们可以将其中一步 “调用具体的排序算法” 延迟到子类中具体实现。在具体子类中,我们可以实现具体的排序算法,如快排、冒泡排序、插入排序等。

    具体代码如下:

    abstract class ArraySorter {
        public final void sort(int[] array) {
            if (array == null || array.length == 0) {
                return;
            }
    
            selectAlgorithm();
            sortArray(array);
        }
    
        protected abstract void selectAlgorithm();
    
        protected abstract void sortArray(int[] array);
    }
    
    class BubbleSorter extends ArraySorter {
        protected void selectAlgorithm() {
            System.out.println("Bubble sorting algorithm selected.");
        }
    
        protected void sortArray(int[] array) {
            // 具体的冒泡排序算法实现
        }
    }
    
    class QuickSorter extends ArraySorter {
        protected void selectAlgorithm() {
            System.out.println("Quick sorting algorithm selected.");
        }
    
        protected void sortArray(int[] array) {
            // 具体的快排算法实现
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这个例子中,我们定义了一个抽象类 ArraySorter,其中包含一个模板方法 sort。在具体子类中,我们分别实现了 BubbleSorter 和 QuickSorter,重写了父类的 selectAlgorithm 和 sortArray 方法。

    当需要对数组进行排序时,只需要创建一个具体的子类,并调用 sort 方法即可。例如:

    int[] array = {...};
    ArraySorter sorter = new BubbleSorter();
    sorter.sort(array);
    
    • 1
    • 2
    • 3

    这样,就可以将算法的公共部分放在抽象类中实现,避免了大量的重复代码,并且能够根据需要灵活地选择不同的排序算法。

    好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
    在这里插入图片描述

    文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
    希望能和诸佬们一起努力,今后我们顶峰相见🍻
    再次感谢各位小伙伴儿们的支持🤞

    在这里插入图片描述

  • 相关阅读:
    Windows 11 22H2 (2022 年更新) 发布,简体中文版、英文版下载
    源码分析:社区办和专业版的权限控制
    Maven 密码加密
    kube-prometheus 系列1 项目介绍
    5G投资下降,遥遥领先的主流5G或被运营商抛弃,“假5G”更获青睐
    五、程序员指南:数据平面开发套件
    【华为OD机试真题 python】 ipv4地址转换成整数【2022 Q4 | 100分】
    领英-如何合并或注销重复领英帐号及利用领英高效开发客户技巧
    最大时延扩展、CP 和相干带宽
    Elasticsearch入门(一):CentOS 7.6 安装ES 7.6.1
  • 原文地址:https://blog.csdn.net/qq_53847859/article/details/130969755