行为模式之九---Strategy
来源:互联网 发布:免费网络代理服务器 编辑:程序博客网 时间:2024/06/03 15:58
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(); } }}
- 行为模式之九---Strategy
- 设计模式笔记--行为型模式之九--Strategy模式
- 行为模式之Strategy模式
- 行为模式之Strategy(策略)
- 【设计模式】行为模式之Strategy策略
- 九、策略模式Strategy(行为型模式)
- 行为型模式之策略STRATEGY
- 【设计模式攻略】行为型模式之Strategy模式
- 行为模式之策略模式(Strategy Pattern)(C++实现)
- 行为型模式之策略模式(Strategy)
- 设计模式(行为型)之策略模式(Strategy Pattern)
- 11种行为型模式之:策略模式(Strategy)
- 行为型模式之策略模式(Strategy)
- 行为模式 - 策略模式(Strategy)
- 设计模式(九):策略模式Strategy(行为型模式)
- strategy-对象行为型模式
- 策略模式(Strategy)----行为笔记
- 行为模式:Strategy(策略)
- linux设备驱动的周期事件
- 在iPhone应用中如何使用随机数(How to Use Random Numbers in Your iPhone App)
- 错误检测和纠错简述
- JTA
- 一个在加拿大上学的朋友的暑假作业
- 行为模式之九---Strategy
- OSPF原理知识剖析
- 给iPhone应用开发的有志者的100个免费的课程和学习指南(100 Free Courses & Tutorials for Aspiring iPhone App Developers)
- 《JAVA编程思想》第四版学习 需要我记住的something--多态
- 面试
- Xmodem接收的代码
- 数据库设计范式深入浅出
- Hyperic HQ 4.1.2 on Mac OS X 10.5.7 Installation Task
- This Memory Management Tip Could Save You Hours of Frustration!