Code Example |
1 // Strategy 2![](/Images/OutliningIndicators/None.gif) 3 // Intent: "Define a family of algorithms, encapsultate each one, and make 4 // them interchangeable. Strategy lets the algorithm vary independently 5 // from clients that use it." 6![](/Images/OutliningIndicators/None.gif) 7 // For further information, read "Design Patterns", p315, Gamma et al., 8 // Addison-Wesley, ISBN:0-201-63361-2 9![](/Images/OutliningIndicators/None.gif) 10![](/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//* Notes: 11 * Ideal for creating exchangeable algorithms. 12 */ 13 14 namespace Strategy_DesignPattern 15![](/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](/Images/OutliningIndicators/ContractedBlock.gif) { 16 using System; 17![](/Images/OutliningIndicators/InBlock.gif) 18 19 abstract class Strategy 20![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 21 abstract public void DoAlgorithm(); 22 } 23![](/Images/OutliningIndicators/InBlock.gif) 24 class FirstStrategy : Strategy 25![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 26 override public void DoAlgorithm() 27![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 28 Console.WriteLine("In first strategy"); 29 } 30 } 31![](/Images/OutliningIndicators/InBlock.gif) 32 class SecondStrategy : Strategy 33![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 34 override public void DoAlgorithm() 35![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 36 Console.WriteLine("In second strategy"); 37 } 38 } 39![](/Images/OutliningIndicators/InBlock.gif) 40 class Context 41![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 42 Strategy s; 43 public Context(Strategy strat) 44![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 45 s = strat; 46 } 47![](/Images/OutliningIndicators/InBlock.gif) 48 public void DoWork() 49![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 50 // some of the context's own code goes here 51 } 52![](/Images/OutliningIndicators/InBlock.gif) 53 public void DoStrategyWork() 54![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 55 // now we can hand off to the strategy to do some 56 // more work 57 s.DoAlgorithm(); 58 } 59 } 60![](/Images/OutliningIndicators/InBlock.gif) 61![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//// <summary> 62 /// Summary description for Client. 63 /// </summary> 64 public class Client 65![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 66 public static int Main(string[] args) 67![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) { 68 FirstStrategy firstStrategy = new FirstStrategy(); 69 Context c = new Context(firstStrategy); 70 c.DoWork(); 71 c.DoStrategyWork(); 72![](/Images/OutliningIndicators/InBlock.gif) 73 return 0; 74 } 75 } 76 } 77![](/Images/OutliningIndicators/None.gif) 78![](/Images/OutliningIndicators/None.gif) |