之前的设计模式帖子

 设计模式系列目录

今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为,有的人喜欢狼吞虎咽,有的人

喜欢细嚼慢咽,有的人喜欢边吃边说

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

 看一下简单的代码实现

  1. #region 策略模式
  2.  
  3. #region 抽象策略
  4. public abstract class Stratety
  5. {
  6. public abstract void StrategyInterface();//子类要实现的方法
  7. }
  8. #endregion
  9.  
  10. #region 具体策略
  11. public class ConcreteStrategyA:Stratety
  12. {
  13. public override void StrategyInterface()
  14. {
  15. Console.WriteLine("A:类A的实现方法");
  16. }
  17. }
  18. public class ConcreteStrategyB : Stratety
  19. {
  20. public override void StrategyInterface()
  21. {
  22. Console.WriteLine("B:类B的实现方法");
  23. }
  24. }
  25. public class ConcreteStrategyC : Stratety
  26. {
  27. public override void StrategyInterface()
  28. {
  29. Console.WriteLine("C:类C的实现方法");
  30. }
  31. }
  32. #endregion
  33.  
  34. public class Context
  35. {
  36. Stratety stratety;
  37. public Context(Stratety f_Stratety)
  38. {
  39. stratety = f_Stratety;
  40. }
  41. public Context()
  42. {
  43. }
  44. public void ExecFun()
  45. {
  46. if (stratety != null)
  47. stratety.StrategyInterface();
  48. }
  49. }
  50. #endregion
  1. static void Main(string[] args)
  2. {
  3. #region 策略模式
  4. Context _context;
  5. _context = new Context(new ConcreteStrategyA());
  6. _context.ExecFun();
  7. _context = new Context(new ConcreteStrategyB());
  8. _context.ExecFun();
  9. _context = new Context(new ConcreteStrategyC());
  10. _context.ExecFun();
  11. #endregion
  12. Console.ReadLine();
  13. }

 

策略模式的优点: 
    1.提供了管理相关算法族的方法。 
    2.可以避免使用多重条件转移语句。 
    缺点: 
    3.必须知道所有的具体策略类及它们的区别. 
    4.生成许多的策略类。 

 

 

 

 

版权声明:本文为li-peng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/li-peng/archive/2013/02/18/2915594.html