文章目录
  1. 策略模式

策略模式

  • 定义一系列算法,将它们一个个封装起来,并且使他们可以互相替换。本模式使得算法可独立于使用它的客户而变化。
  • 注意与状态模式的区分,这两个模式的类图很像,策略模式作用的策略之间是平行的,由客户端来进行自主选择,而状态模式的各个状态对于客户端而言在某种程度上是不可见的,由持有这些状态的对象根据情况去自发改变,从而影响行为,这种行为改变的源头不是客户端而是对象自身
    Strategy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public interface SortStrategy {
List<Integer> sort(List<Integer> list);
}
public class QuickSort implements SortStrategy{
private void partion(Integer[] array, int left, int right){
if(left>=right){
return;
}
Integer baseNum=array[left];
int leftIndex=left,rightIndex=right;
while(leftIndex<rightIndex){
while(leftIndex<rightIndex && array[rightIndex]>=baseNum){
rightIndex--;
}
if(leftIndex<rightIndex){
array[leftIndex++]=array[rightIndex];
}
while(leftIndex<rightIndex && array[leftIndex]<baseNum){
leftIndex++;
}
if(leftIndex<rightIndex){
array[rightIndex--]=array[leftIndex];
}
}
array[leftIndex]=baseNum;
partion(array,left,leftIndex-1);
partion(array,leftIndex+1,right);
}
@Override
public List<Integer> sort(List<Integer> list) {
Integer[] arrays=Iterables.toArray(list,Integer.class);
partion(arrays,0,list.size()-1);
return Lists.newArrayList(arrays);
}
}
public class StupidSort implements SortStrategy{
@Override
public List<Integer> sort(List<Integer> list) {
Integer[] arrays=Iterables.toArray(list,Integer.class);
for(int i=0;i<arrays.length-1;i++){
for(int j=i+1;j<arrays.length;j++){
if (arrays[i]>arrays[j]){
int t=arrays[i];
arrays[i]=arrays[j];
arrays[j]=t;
}
}
}
return Lists.newArrayList(arrays);
}
}
public class SortUtil {
private SortStrategy sortStrategy;
public SortUtil(SortStrategy sortStrategy){
this.sortStrategy=sortStrategy;
}
public List<Integer> sort(List<Integer> list){
return sortStrategy.sort(list);
}
}
public class App {
public static void main(String[] args) {
List<Integer> list= Lists.newArrayList(6,5,4,3,2,1);
SortUtil util=new SortUtil(new QuickSort());
list=util.sort(list);
System.out.println(Iterables.toString(list));
}
}
文章目录
  1. 策略模式