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

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

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

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

以下正文开始
23种设计模式之模板方法模式(Template Method Pattern)_第1张图片

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

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

定义抽象类(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) {
        // 具体的快排算法实现
    }
}

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

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

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

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

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

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

在这里插入图片描述

你可能感兴趣的:(一天一种设计模式,设计模式,模板方法模式,java)