之前的設計模式帖子
今天說一下策略模式:定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶
換句話說策略模式,是指對象有某個行為,但是在不同的場景中,該行為有不同的實現算法,比如吃東西的行為,有的人喜歡狼吞虎咽,有的人
喜歡細嚼慢咽,有的人喜歡邊吃邊說
策略模式的重心不是如何實現算法,而是如何組織、調用這些算法,從而讓程序結構更靈活,具有更好的維護性和擴展性。
看一下簡單的代碼實現
#region 策略模式 #region 抽象策略 public abstract class Stratety { public abstract void StrategyInterface();//子類要實現的方法 } #endregion #region 具體策略 public class ConcreteStrategyA:Stratety { public override void StrategyInterface() { Console.WriteLine("A:類A的實現方法"); } } public class ConcreteStrategyB : Stratety { public override void StrategyInterface() { Console.WriteLine("B:類B的實現方法"); } } public class ConcreteStrategyC : Stratety { public override void StrategyInterface() { Console.WriteLine("C:類C的實現方法"); } } #endregion public class Context { Stratety stratety; public Context(Stratety f_Stratety) { stratety = f_Stratety; } public Context() { } public void ExecFun() { if (stratety != null) stratety.StrategyInterface(); } } #endregion
static void Main(string[] args) { #region 策略模式 Context _context; _context = new Context(new ConcreteStrategyA()); _context.ExecFun(); _context = new Context(new ConcreteStrategyB()); _context.ExecFun(); _context = new Context(new ConcreteStrategyC()); _context.ExecFun(); #endregion Console.ReadLine(); }
策略模式的優點:
1.提供了管理相關算法族的方法。
2.可以避免使用多重條件轉移語句。
缺點:
3.必須知道所有的具體策略類及它們的區別.
4.生成許多的策略類。