前言:大家好,我是小威,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) {
// 具体的快排算法实现
}
}
在这个例子中,我们定义了一个抽象类 ArraySorter,其中包含一个模板方法 sort。在具体子类中,我们分别实现了 BubbleSorter 和 QuickSorter,重写了父类的 selectAlgorithm 和 sortArray 方法。
当需要对数组进行排序时,只需要创建一个具体的子类,并调用 sort 方法即可。例如:
int[] array = {...};
ArraySorter sorter = new BubbleSorter();
sorter.sort(array);
这样,就可以将算法的公共部分放在抽象类中实现,避免了大量的重复代码,并且能够根据需要灵活地选择不同的排序算法。
好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞