对象行为型模式之策略模式 重要等级4难度等级2

适用环境:如果在一个系统里面有许多类,他们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一个行为。一个系统需要动态地在几种算法中选择一种,那么可以将这些算法封装到一个个地具体算法类中,而这些具体算法类都是一个抽象算法类的子类。由于多态性原则,客户端可以选择使用任何一个具体算法类,并只需要维持一个数据类型是抽象算法类的对象。不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性和安全性。 Java SE的容器布局管理就是策略模式应用的一个经典实例。

    策略模式队形与解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某个问题,同时可以方便地更换算法或者增加新的算法。

    定义:定义一系列算法,将每个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它地客户端而变化,也称为政策模式。

模式结构图:

代码:

客户端:

package com.strategypattern.hing;

public class Client {

	public static void main(String[] args) {
		int arr[] = {1,44,5,6,6,2};
		Sort s = (Sort)XMLUtil.getBean();
		s.sort(arr);
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

 

抽象算法类:

 

package com.strategypattern.hing;

public abstract class Sort {
	public int[] sort(int arr[]) {
		return null;
	}
}

 

具体算法类:

 

package com.strategypattern.hing;

public class BubbleSort extends Sort {
	public int[] sort(int arr[]) {
		int temp = 0;
		for(int i = 0; i < arr.length ; i ++) {
			for(int j = i; j < arr.length ; j ++) {
				if (arr[i] > arr[j]) {
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println("冒泡排序!");
		return arr;
	}
}
package com.strategypattern.hing;

public class InsertionSort extends Sort {
	public int[] sort(int arr[]) {
		int len = arr.length;
		for(int i = 1; i < len; i++) {
			int temp = arr[i];
			int j;//此处定义的变量用于与后面的arr[j] = temp相呼应
			for(j = i; j > 0; j --) {
				if(arr[j-1] > temp) {
					arr[j] = arr[j - 1];
				}else {
					break;
				}
			}
			arr[j] = temp;
		}
		System.out.println("插入排序!");
		return arr;
	}
}


总结:策略模式针对同一问题可以使用不同的解决方案类型的情况下适用性比较好。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值