老聚 发表于 2013-1-6 02:21:16

设计模式学习笔记-策略模式

<div id="cnblogs_post_body">1. 概述
  它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户端。
2. 模式中的角色
  2.1 策略类(Stratege):定义所有支持的算法的公共接口。
  2.2 具体策略类(Concrete Stratege):封装了具体的算法或行为,继承于Stratege类。
  2.3 上下文类(Context):用一个ConcreteStratege来配置,维护一个对Stratege对象的引用。
3. 模式解读
  3.1 策略模式的一般化类图
  http://pic002.cnblogs.com/images/2012/155937/2012070310013466.png
  3.2 策略模式的代码实现
<div class="cnblogs_code">    /// <summary>    /// 策略类,定义了所有支持的算法的公共接口    /// </summary>    public abstract class Stratege    {      /// <summary>      /// 策略类中支持的算法,当然还可以有更多,这里只定义了一个。      /// </summary>      public abstract void Algorithm();    }    /// <summary>    /// 具体策略 A,实现了一种具体算法    /// </summary>    public class ConcreteStrategeA : Stratege    {      /// <summary>      /// 具体算法      /// </summary>      public override void Algorithm()      {            // 策略A中实现的算法      }    }    /// <summary>    /// 具体策略 B,实现了一种具体算法    /// </summary>    public class ConcreteStrategeB : Stratege    {      /// <summary>      /// 具体算法      /// </summary>      public override void Algorithm()      {            // 策略B中实现的算法      }    }    /// <summary>    /// Context 上下文,维护一个对Stratege对象的引用    /// </summary>    public class Context    {      private Stratege m_Stratege;      /// <summary>      /// 初始化上下文时,将具体策略传入      /// </summary>      /// <param name="stratege"></param>      public Context(Stratege stratege)      {            m_Stratege = stratege;      }      /// <summary>      /// 根据具体策略对象,调用其算法      /// </summary>      public void ExecuteAlgorithm()      {            m_Stratege.Algorithm();      }    }
页: [1]
查看完整版本: 设计模式学习笔记-策略模式