java设计模式之模板模式

模板模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

经典代码:
abstract class SortTemplate {
	public void showSortResult(int[] arr) {
	sort(arr);
    for(int x:arr) {
		System.out.print( x + " / ");
	}
	System.out.println();
	}
	public abstract void sort(int[] arr);
}

class BubbleSort extends SortTemplate {
	public void sort(int[] arr) {
		System.out.println("冒泡排序:");
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
}

class SelectSort extends SortTemplate{
	public void sort(int[] arr){
		System.out.println("选择排序:");
		for(int i=0;i<arr.length-1;i++){
			for(int j=i+1;j<arr.length;j++){
				if(arr[i]>arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
	}
}

class QuickSort extends SortTemplate{
	public void sort(int[] arr){
		System.out.println("快速排序:");
		quickSort(arr,0,arr.length-1);
	}
	public void quickSort(int[] arr,int left,int right){
		if(left<right){
			int i=left,j=right,x=arr[left];
			while(i<j){
				while(i<j&&arr[j]>=x)
					j--;
				if(i<j){
					arr[i++]=arr[j];
				}
				while(i<j&&arr[i]<x)
					i++;
				if(i<j){
					arr[j--]=arr[i];
				}
			}
			arr[i]=x;
			quickSort(arr,left,i-1);
			quickSort(arr,i+1,right);
		}
	}
}

class TemplateDemo{
	public static void main(String[] args) {
		int[] arr1 = {44,44,2,32,54,22,88,77,99,11};
		int[] arr2 = {34,32,6,12,98,34,81,30,1,45};
		int[] arr3 = {73,5,19,40,99,20,12,48,28,64,308,23};
		SortTemplate st = new BubbleSort();
		st.showSortResult(arr1);
		st = new SelectSort();
		st.showSortResult(arr2);
		st = new QuickSort();
		st.showSortResult(arr3);
	}
}

运行结果:

冒泡排序:
2 / 11 / 22 / 32 / 44 / 44 / 54 / 77 / 88 / 99 /
选择排序:
1 / 6 / 12 / 30 / 32 / 34 / 34 / 45 / 81 / 98 /
快速排序:
5 / 12 / 19 / 20 / 23 / 28 / 40 / 48 / 64 / 73 / 99 / 308 /
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值