行为模式之九---Strategy
2009-06-10 22:20
253 查看
1、结构图
2、代码
/***************************************************************** * 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 * 本模式使得算法可独立于使用它的客户而变化。 * 适用性: * 1、许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个 * 行为来配置一个类的方法。 * 2、需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空 * 间/时间权衡的算法。当这些变体实现为一个算法的类层次时[HO87] ,可 * 以使用策略模式。 * 3、算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、 * 与算法相关的数据结构。 * 4、一个类定义了多种行为, 并且这些行为在这个类的操作中以多个条件语句 * 的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些 * 条件语句。 * * 协作: * 1、Strategy和Context相互作用以实现选定的算法。当算法被调用时,Context * 可以将该算法所需要的所有数据都传递给该Strategy。或者,Context可以将 * 自身作为一个参数传递给Strategy操作。这就让Strategy在需要时可以回调 * Context。 * 2、Context将它的客户的请求转发给它的Strategy。客户通常创建并传递一个 * ConcreteStrategy对象给该Context;这样,客户紧与Context交互。通常 * 有一系列的ConcreteStrategy类可供客户从中选择。 * 作者:董怀信 * 日期:2009-06-10 * **************************************************************/ using System; namespace DesignPattern.BehavioralPattern { /// <summary> /// 定义所有支持算法的公共接口。Context使用这个接口来调用某ConcreteStrategy /// 定义的算法。 /// </summary> public abstract class Strategy { public abstract void AlgorithmInterface(); } /// <summary> /// 以Strategy接口实现某具体算法。 /// </summary> public class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine("ConcreteStrategyA.AlgorithmInterface();"); } } /// <summary> /// 以Strategy接口实现某具体算法。 /// </summary> public class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine("ConcreteStrategyB.AlgorithmInterface();"); } } public class ConcreteStrategyC : Strategy { public override void AlgorithmInterface() { Console.WriteLine("ConcreteStrategyC.AlgorithmInterface();"); } } /// <summary> /// 1、用一个ConcreteStrategy算法来配置。 /// 2、维护对一个Strategy对象的引用。 /// 3、可定义一个接口来让Strategty访问它的数据。 /// </summary> public class Context { private Strategy m_strategy; public Context(Strategy strategy) { m_strategy = strategy; } public void ContextInterface() { m_strategy.AlgorithmInterface(); } } /// <summary> /// 客户测试 /// </summary> public class Client { public void Test() { Strategy strategy = new ConcreteStrategyA(); Context context = new Context(strategy); context.ContextInterface(); strategy = new ConcreteStrategyB(); context = new Context(strategy); context.ContextInterface(); strategy = new ConcreteStrategyC(); context = new Context(strategy); context.ContextInterface(); } } }
相关文章推荐
- 设计模式08-策略模式Strategy(对象行为模式)
- 策略模式(Strategy)----行为笔记
- 行为模型-Strategy(策略)模式
- 行为模式:Strategy(策略)
- 对象行为模式——策略模式(Strategy)
- Strategy模式——行为模式
- STRATEGY(策略)——对象行为模式
- 行为设计模式---策略模式(Strategy)
- 行为模式之Strategy模式
- 行为模式之Strategy(策略)
- 行为模式——策略( strategy)模式
- [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)
- STRATEGY(策略)-对象行为模式
- 【设计模式基础】行为模式 - 5 - 策略(Strategy)
- Java设计模式(15)——行为模式之策略模式(Strategy)
- 【设计模式学习笔记二十二】【行为模式】【策略模式(Strategy)】
- 行为类模式(九):策略(Strategy)
- java设计模式进阶_strategy
- C++实现Behavioral - Strategy模式
- Java面向对象设计模式(十三)——策略模式(strategy)