策略模式
策略模式跟状态模式是否相似,唯一的区别是策略模式无法在一个状态切换到另一个状态,所以叫做策略
可以看出策略模式一旦使用就注定,例如排序,我们使用了冒泡排序就无法使用选择排序;
但是状态模式不一样,状态模式是可以从一个状态切换到另一个状态;
public class Test {
public static void main(String[] args) {
int[] arr = {2, 4, 6, 12, 432, 43, 23, 65, 24, 34};
SortingStrategy.Sort(arr,new BubbleStrategy());
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
//排序策略抽象类
abstract class SortingStrategy {
//排序方法
public abstract void Sorting(int arr[]);
public static void Sort(int[] arr,SortingStrategy strategy){
strategy.Sorting(arr);
}
}
//策略实现类(选择排序)
class SelectStrategy extends SortingStrategy {
@Override
public void Sorting(int[] arr) {
for(int i=0;i<arr.length;i++){
for (int j=i;j<arr.length;j++){
if(arr[i]>arr[j]){
arr[i]=arr[j]+arr[i];
arr[j]=arr[i]-arr[j];
arr[i]=arr[i]-arr[j];
}
}
}
}
}
//策略实现类(冒泡排序)
class BubbleStrategy extends SortingStrategy {
@Override
public void Sorting(int[] arr) {
for(int i=0;i<arr.length;i++){
for (int j=1;j<arr.length;j++){
if(arr[j-1]>arr[j]){
arr[j-1]=arr[j]+arr[j-1];
arr[j]=arr[j-1]-arr[j];
arr[j-1]=arr[j-1]-arr[j];
}
}
}
}
}
上面我写了一个策略抽象类,当然也可以写成接口,
当我们想使用那个策略,我们就可以new出自己想要的策略