C#设计模式:策略者模式(Stragety Pattern)
一,什么是策略模式?
1,针对同一命令或行为,不同的策略做不同的动作。
2,比如针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
二,如下代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _19.策略模式 { /// <summary> /// 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。 /// 策略模式通常把一系列的算法包装到一系列的策略类里面。 /// 用一句话慨括策略模式就是——“将每个算法封装到不同的策略类中,使得它们可以互换”。 /// </summary> class Program { static void Main(string[] args) { while (true) { Console.WriteLine("输入第一个数字(整数):"); string type = Console.ReadLine(); int iType = 0; if (!int.TryParse(type, out iType)) { Console.WriteLine("输入数字无效,请重新输入"); continue; } ///策略的调用 StrategyContext context = new StrategyContext(); context.SetStrategy(StrategyFortory.CreateInstance((StrategyType)iType)); context.Setup(); } } } /// <summary> /// 使用工厂模式管理策略 /// </summary> public class StrategyFortory { public static AbstractStrategy CreateInstance(StrategyType type) { AbstractStrategy abstractStrategy = null; switch (type) { case StrategyType.Chinese: abstractStrategy = new ChineseStrategy(); break; case StrategyType.Usa: abstractStrategy = new UsaStrategy(); break; } return abstractStrategy; } } /// <summary> /// 抽象策略 /// </summary> public abstract class AbstractStrategy { public abstract void Setup(); } /// <summary> /// 具体策略 /// </summary> public class ChineseStrategy : AbstractStrategy { public override void Setup() { Console.WriteLine("中国人"); } } /// <summary> /// 具体策略 /// </summary> public class UsaStrategy : AbstractStrategy { public override void Setup() { Console.WriteLine("美国人"); } } /// <summary> /// 策略的使用 /// </summary> public class StrategyContext { AbstractStrategy strategy = null; public void SetStrategy(AbstractStrategy strategy) { this.strategy = strategy; } public void Setup() { this.strategy.Setup(); } } /// <summary> /// 策略枚举 /// </summary> public enum StrategyType { Chinese = 0, Usa = 1 } }