一、定義 策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立於使用它的客戶而獨立變化。 二、UML圖:(來自百度百科) 根據上面的UML圖,我們需要的類有: 1)Content類 2)Strategy抽象類 3)若幹ConcreteStrategy類 三 ...
一、定義
策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立於使用它的客戶而獨立變化。
二、UML圖:(來自百度百科)
根據上面的UML圖,我們需要的類有:
1)Content類
2)Strategy抽象類
3)若幹ConcreteStrategy類
三、寫法:
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 namespace StudyDesign 6 { 7 //抽像演算法類 8 public abstract class Strategy 9 { 10 //演算法方法 11 public abstract void AlgorithmInterface(); 12 } 13 14 15 16 //具體演算法A 17 public class ConcreteStrategyA:Strategy 18 { 19 //演算法實現 20 public override void AlgorithmInterface() 21 { 22 Console.WriteLine("演算法實現A"); 23 } 24 } 25 26 27 //具體演算法B 28 public class ConcreteStrategyB:Strategy 29 { 30 public override void AlgorithmInterface() 31 { 32 Console.WriteLine("演算法實現B"); 33 } 34 } 35 36 37 //具體演算法C 38 public class ConcreteStrategyC:Strategy 39 { 40 public override void AlgorithmInterface() 41 { 42 Console.WriteLine("演算法實現C"); 43 } 44 } 45 46 47 48 49 public class Content 50 { 51 private Strategy strategy; 52 53 public Content(Strategy strategy) //構造函數 54 { 55 this.strategy = strategy; 56 } 57 58 public void ContentInterface() //方法 59 { 60 strategy.AlgorithmInterface(); 61 } 62 } 63 64 }
四、調用:
Content content; content=new Content(new ConcreteStrategyA()); content.ContentInterface(); content=new Content(new ConcreteStrategyB()); content.ContentInterface(); content=new Content(new ConcreteStrategyC()); content.ContentInterface();
五、特點:
1. 所有這些演算法完成的都是相同的工作。只是實現不同。
2. 不用在一個大程式里if...else...了,頻繁改動大程式還有風險
3. 調用者必須知道有哪些演算法