Strategy

策略模式(Strategy):定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。

 

    //策略类,定义所有支持的算法的公共接口
    public abstract class Strategy
    {
        //算法方法。
        public abstract void AlgorithmInterface();
    }

    //封装了具体的方法或行为,继承于Strategy
    public class ConcreteStrategyA : Strategy
    {
        public override void AlgorithmInterface()
        {
            //算法A实现方法
            Console.WriteLine("算法A的实现");
        }
    }

    //封装了具体的方法或行为,继承于Strategy
    class ConcreteStrategyB:Strategy
    {
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法B的实现");
        }
    }

    //封装了具体的方法或行为,继承于Strategy
    class ConcreteStrategyC : Strategy
    {
        public override void AlgorithmInterface()
        {
            Console.WriteLine("算法C的实现");
        }
    }

    //上下文
    class Context
    {
        Strategy straetgy;
        public Context(Strategy straetgy)//初始化时,传入具体的策略对象
        {
            this.straetgy = straetgy;
        }
        //上下文接口
        public void ContextInterface() { //根据其具体的策略对象,调用其算法的方法
            straetgy.AlgorithmInterface();
        }
    }

        static void Main(string[] args)
        {
            Context context;
            context = new Context(new ConcreteStrategyA());//由于实例化不同的策略,所以最终在调用context.ContextInterface()时,所获得的结果也是不相同的
            context.ContextInterface();

            context = new Context(new ConcreteStrategyB());//由于实例化不同的策略,所以最终在调用context.ContextInterface()时,所获得的结果也是不相同的
            context.ContextInterface();

            context = new Context(new ConcreteStrategyC());//由于实例化不同的策略,所以最终在调用context.ContextInterface()时,所获得的结果也是不相同的
            context.ContextInterface();

            Console.Read();
        }

 

posted @ 2019-11-06 16:00  水墨晨诗  阅读(375)  评论(0编辑  收藏  举报