策略模式

实现一个功能有多重算法(策略),根据环境或条件选择不同的算法(策略)来完成该功能。这些算法(策略)之间可相互替换,而不会影响到使用算法的客户。

/// <summary>
    /// 抽象策略类: 定义所有支持的算法的公共接口
    /// </summary>
    public interface IStrategy
    {
        void operate();
    }

    /// <summary>
    /// 具体策略类: 实现抽象策略类的具体算法
    /// </summary>
    public class BackDoor : IStrategy
    {
        public void operate()
        {
            Console.WriteLine("找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备");
        }
    }

    /// <summary>
    /// 具体策略类: 实现抽象策略类的具体算法
    /// </summary>
    public class GivenGreenLight : IStrategy
    {
        public void operate()
        {
            Console.WriteLine("求吴国太开个绿灯,放行");
        }
    }

    /// <summary>
    /// 具体策略类: 实现抽象策略类的具体算法
    /// </summary>
    public class BlackEnemy : IStrategy
    {
        public void operate()
        {
            Console.WriteLine("孙夫人断后,挡住追兵");
        }
    }

    /// <summary>
    /// 环境类, 维护对策略类的引用
    /// </summary>
    public class Context {
        IStrategy strategy;
        public Context(IStrategy strategy) {
            this.strategy = strategy;
        }
        public void SetStratege(IStrategy strategy) {
            this.strategy = strategy;
        }
        public void Operate()
        {
            strategy.operate();
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            //刘备要到江东娶老婆了,走之前诸葛亮给赵云三个锦囊妙计,说是按天机拆开能解决棘手问题。
            Context context = new Context(new BackDoor());
            context.Operate();

            context.SetStratege(new GivenGreenLight());
            context.Operate();

            context.SetStratege(new BlackEnemy());
            context.Operate();

            Console.ReadKey();
        }
    }

  

 

posted on 2017-08-08 02:26  MojoJojo  阅读(137)  评论(0)    收藏  举报

导航