1、策略模式简介 1.1>、定义 策略是为达到某一目的而采取的手段或方法,策略模式的本质是目标与手段的分离,手段不同而最终达成的目标一致。客户只关心目标而不在意具体的实现方法,实现方法要根据具体的环境因素而变化。 1.2>、使用频率 中高 2、策略模式结构图 2.1>、结构图 2.2>、参与者 策略模式参与者: Strategy 策略 ° 定义所支持的算法的公共接口。Context使用这个接口来调用某个ConcreteStrategy定义的算法。 ConcreteStrategy 具体策略 ° 实现Strategy接口中的具体算法。 Context 上下文 ° 通过一个ConcreteStrategy对象来对其进行配置; ° 维护一个对Strategy对象的引用; ° 可定义一个接口来让Strategy访问它的数据。 3、策略模式结构实现 Strategy.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { public abstract class Strategy { public abstract void AlgorithmInterface(); } } ConcreteStrategyA.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { public class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine("Called ConcreteStrategyA.AlgorithmInterface()"); } } } ConcreteStrategyB.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { public class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine("Called ConcreteStrategyB.AlgorithmInterface()"); } } } ConcreteStrategyC.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { public class ConcreteStrategyC : Strategy { public override void AlgorithmInterface() { Console.WriteLine("Called ConcreteStrategyC.AlgorithmInterface()"); } } } Context.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { public class Context { private Strategy _strategy; public Context(Strategy strategy) { this._strategy = strategy; } public void ContextInterface() { _strategy.AlgorithmInterface(); } } } Program.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace StrategyPattern.Structural { class Program { static void Main(string[] args) { Context context; context = new Context(new ConcreteStrategyA()); context.ContextInterface(); context = new Context(new ConcreteStrategyB()); context.ContextInterface(); context = new Context(new ConcreteStrategyC()); context.ContextInterface(); } } } 运行结果: 4、策略模式应用分析 策略模式适用情形: 策略模式优点: 分类: 设计模式 |
|
来自: 雪柳花明 > 《完整的一套设计模式C#纯摘抄》