設計模式01-----策略模式
阿新 • • 發佈:2018-08-16
工具 div 天上 的區別 區分 inter nts ... 所有
我的理解,策略模式就是提供很多策略。比如,每天上班的交通工具,可以自行車,公交車,地鐵等等策略。而誰來使用這個策略呢,上班族。
下面特點摘自菜鳥教程:“
意圖:定義一系列的算法,把它們一個個封裝起來, 並且使它們可相互替換。
主要解決:在有多種算法相似的情況下,使用 if...else 所帶來的復雜和難以維護。
何時使用:一個系統有許多許多類,而區分它們的只是他們直接的行為。
如何解決:將這些算法封裝成一個一個的類,任意地替換。
關鍵代碼:實現同一個接口。
優點: 1、算法可以自由切換。 2、避免使用多重條件判斷。 3、擴展性良好。
缺點: 1、策略類會增多。 2、所有策略類都需要對外暴露。
使用場景: 1、如果在一個系統裏面有許多類,它們之間的區別僅在於它們的行為,那麽使用策略模式可以動態地讓一個對象在許多行為中選擇一種行為。 2、一個系統需要動態地在幾種算法中選擇一種。 3、如果一個對象有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。
註意事項:如果一個系統的策略多於四個,就需要考慮使用混合模式,解決策略類膨脹的問題。”
1 package com.test.c; 2 3 public interface Strategy { 4 public void take(); 5 6 }View Code
1 package com.test.c;View Code2 3 public class BicycleStrategy implements Strategy { 4 5 public void take() { 6 System.out.println("Take Bicycle"); 7 } 8 9 }
1 package com.test.c; 2 3 public class BusStrategy implements Strategy { 4 5 public void take() { 6 System.out.println("Take Bus");View Code7 8 } 9 10 }
1 package com.test.c; 2 3 public class SubwayStrategy implements Strategy { 4 5 public void take() { 6 System.out.println("Take Subway"); 7 8 } 9 10 }View Code
1 package com.test.c; 2 3 public class Worker { 4 private Strategy strategy; 5 public Worker(Strategy strategy) 6 { 7 this.strategy=strategy; 8 execute();//不一定在構造器裏面調用,可以單獨調用。 9 } 10 11 public void execute() 12 { 13 strategy.take(); 14 } 15 16 }View Code
1 package com.test.c; 2 3 public class Test { 4 public static void main(String args[]) 5 { 6 Strategy strategy=new BusStrategy(); 7 Worker worker=new Worker(strategy); 8 9 Strategy strategy2=new BicycleStrategy(); 10 Worker worker2=new Worker(strategy2); 11 12 Strategy strategy3=new SubwayStrategy(); 13 Worker worker3=new Worker(strategy3); 14 } 15 16 }View Code
1 Take Bus 2 Take Bicycle 3 Take SubwayView Code
這樣,上班族可以選擇任意的策略來決定如何上班。
設計模式01-----策略模式