1. 程式人生 > >大話設計模式之策略模式

大話設計模式之策略模式

系統 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     @Override
3 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 public
class 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當成參數傳遞給一個方法。

大話設計模式之策略模式