23、模板方法模式

本文介绍模板方法模式的基本概念,通过示例代码展示了如何定义算法框架并允许子类重定义特定步骤,同时保持整体结构不变。此外,还讨论了该模式的优点,如易于扩展、便于维护及灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板方法模式

 

1、定义

定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤

 

2、结构图



 

 

  • AbstractSort是一个抽象类,将sort方法抽象,showSortResult实现。
  • ConcreteSort是对AbstractSort的实现,并实现sort方法

3、代码

(1)AbstractSort类

 

public abstract class AbstractSort {

	public abstract void sort(int[] nums);
	
	public void showSortResult(int[] nums){
		sort(nums);
		for(int num: nums){
			System.out.println(num);
		}
	}
	
}

 

 (2)ConcreteSort类

 

 

 

 

public class ConcreteSort extends AbstractSort {

	public void sort(int[] array) {
		for (int i = 0; i < array.length - 1; i++) {
			selectSort(array, i);
		}
	}

	private void selectSort(int[] array, int index) {
		int MinValue = 32767; // 最小值变量
		int indexMin = 0; // 最小值索引变量
		int Temp; // 暂存变量
		for (int i = index; i < array.length; i++) {
			if (array[i] < MinValue) { // 找到最小值
				MinValue = array[i]; // 储存最小值
				indexMin = i;
			}
		}
		Temp = array[index]; // 交换两数值
		array[index] = array[indexMin];
		array[indexMin] = Temp;
	}

}

 

(3)客户端

public class Client {
	
	public static void main(String[] args) {
		int[] nums = {0,9,5,3,44,2,5,6,89};
		AbstractSort sort = new ConcreteSort();
		sort.showSortResult(nums);
	}

}

 

(4)运行结果

0
2
3
5
5
6
9
44
89

 

 

4、总结

        容易扩展。一般来说,抽象类中的模版方法是不易反生改变的部分,而抽象方法是容易反生变化的部分,因此通过增加实现类一般可以很容易实现功能的扩展,符合开闭原则。

       便于维护。对于模版方法模式来说,正是由于他们的主要逻辑相同,才使用了模版方法,假如不使用模版方法,任由这些相同的代码散乱的分布在不同的类中,维护起来是非常不方便的。

       比较灵活。因为有钩子方法,因此,子类的实现也可以影响父类中主逻辑的运行。但是,在灵活的同时,由于子类影响到了父类,违反了里氏替换原则,也会给程序带来风险。这就对抽象类的设计有了更高的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值