策略模式
介绍
策略模式定义了一系列的算法,将每一个算法封装起来,并且使它们之间可以相互替换,策略模式让算法的变化不会影响到使用算法的客户。
(1)Stragegy:定义了一个共同的接口。所有具体的算法类实现这个接口。环境类Context使用这个接口调用具体的算法类。
(2)ConcreteStragegy:封装了具体的算法,实现同一个接口。
(3)Context:环境类用于配置一个具体的算法策略对象,维持一个策略接口类型的参考(reference),并且可以定义一个让接口Strategy的具体对象访问的接口。
示例
算法类
public interface SortAlgorithm
{
public abstract int[] sort(int[] nums,Context ct);
}
public class BubbleSort implements SortAlgorithm
{
public int[] sort(int[] nums,Context ct)
{
...
}
}
class Context
{
SortAlgorithm alg;
private long stratTime;
private long endTime;
...
public Context(SortAlgorithm alg){this.alg = alg;}
public int[] sortIntArray(int[] a)
{
return this.alg.sort(a,this);
}
...
}
优点
(1)得到一系列可复用的算法,这些算法继承了一个共同的抽象类。
(2)将各个算法封装在不同的策略子类中,使逻辑更加清晰,各个算法可以独立的变化。
(3)是功能改变或者拓展更加的容易。