定義:
是對於演算法的包裝,把使用演算法的責任和演算法本身分隔,委派給不同的物件管理。策略模式通常把一個系列的演算法包裝到一系列的策略類裡面,作為一個抽象策略型別的子型別。就是:“準備一組演算法,並將每一個演算法封裝起來,使得它們可以互換。”
意圖:
針對一組演算法,將沒喲個演算法封裝到具有共同介面的獨立類中,從而使得它們可以互相替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。
public class StraregyDemo { public static void main(String[] args) { // TODO Auto-generated method stub int[] array = {5,66,88,21,58,99}; BubbleSort bSort = new BubbleSort(); SelectSort sSort = new SelectSort(); Context con1 = new Context(bSort); Context con2 = new Context(sSort); con1.sort(array); con1.printArray(array); con2.sort(array); con2.printArray(array); } } class Context{ private iSort sort = null; public Context(iSort sort) { this.sort = sort; } //本身沒有實現排序方法,而是呼叫排序方法 public void sort(int[] array) { sort.sort(array); } public void printArray(int[] array) { for(int i = 0;i<array.length;i++) { System.out.print(array[i]+" "); } } } interface iSort{ void sort(int[] array); } //氣泡排序法 class BubbleSort implements iSort{ public void sort(int[] array) { System.out.println("氣泡排序法:"); for(int i = 0;i<array.length;i++) { for(int j = 0;j<array.length-i-1;j++) { if(array[j]>array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } } //選擇排序法 class SelectSort implements iSort{ public void sort(int[] array) { System.out.println("選擇排序法:"); for(int i = 0;i<array.length;i++) { int min = i; for(int j = i+1;j<array.length;j++) { if(array[min]>array[j]) { min = j; } } if(i!= min) { int temp = array[i]; array[i] = array[min]; array[min] = temp; } } } }