大話設計模式之策略模式
阿新 • • 發佈:2018-05-06
系統 AC 抽象類 技術 algo str stat 出現 args
背景:
商場促銷期間,可能會出現8折、5折的促銷活動,也可能出現滿100減10、滿200減30的促銷活動,設計一個收銀系統。
策略模式:定義了算法家族,讓它們之間可以互相替換,此模式讓算法的變化不會影響到使用算法的客戶。
UML類圖:
Demo:
算法接口Strategy:
1 public interface Strategy { 2 3 void algorithmInterface(); 4 }
具體算法ConcreteStrategyA:
1 public class ConcreteStrategyA implements Strategy { 2 @Override3 public void algorithmInterface() { 4 System.out.println("算法A實現"); 5 } 6 }
具體算法ConcreteStrategyB:
1 public class ConcreteStrategyB implements Strategy { 2 @Override 3 public void algorithmInterface() { 4 System.out.println("算法B實現"); 5 } 6 }
Context上下文類:
1 publicclass Context { 2 3 private Strategy stagtegy; 4 5 public Context(String algorithm) { 6 switch (algorithm){ 7 case "A":stagtegy = new ConcreteStrategyA();break; 8 case "B":stagtegy = new ConcreteStrategyB();break; 9 default:break; 10 }11 } 12 13 public void contextInterface(){ 14 stagtegy.algorithmInterface(); 15 } 16 }
測試類:
1 public class Main { 2 3 public static void main(String[] args) { 4 Context context = new Context("A"); 5 context.contextInterface(); 6 } 7 }
總結:
策略模式在平時開發中比較常用,使用場景是:一個接口或抽象類有一組具體的實現,使用時使用接口或抽象類中的抽象方法,這樣可根據傳入的不同實例實現不同的策略。比如可以將上述的Strategy當成參數傳遞給一個方法。
大話設計模式之策略模式