策略模式

策略模式

策略模式就是定义一系列的算法,并且将算法封装起来,使他们可以相互替换,并且算法的替换不会使用客户端,需要设计一个接口,为一系列实现提供一个统一的方法,多个实现类实现该j接口,设计一个抽象类,提供辅助函数.
从概念来看,所有的算法完成的都是相同的工作,只是实现不同.在一个上下文中完成对算法的改变,每次要新增一个算法只需要在新增一个实现类就可以

具体例子:

抽象接口:

封装了算法对外的同意接口

1
2
3
public interface Sort  {
public void sort(int[] arr) ;
}

具体实现类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class QuickSort implements Sort {
@Override
public void sort(int[] arr) {
quicksort(arr);
}
public void quicksort(int arr[]){
//具体实现
}
}
public class MergeSort implements Sort {
@Override
public void sort(int[] arr) {
//具体实现
}
}

上下文

使用算法全都这里使用,如果想要调用不同的算法,只需要传入相应的对象即可改变算法.

1
2
3
4
5
6
7
8
9
public class Context {
Sort sort;
public Context(Sort sort){
this.sort = sort;
}
public void ContextInterface(int[] arr){
sort.sort(arr);
}
}

总结 :
策略模式主要是封装了变化,当不同的行为对其在一个类中时,就可能会有很多的条件语句,可读性不高.所以可以将这些行为封装在独立的类中,在使用行为的类来增强代码可读性.