策略模式

1.定义

Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换)

2.模式说明

Context:封装角色

屏蔽高层模块对策略、算法的直接访问,封闭可能存在的变化。

Stratety:抽象策略角色

定义每个策略或算法必须具有的方法和属性。

ConcreteStategy:具体策略角色

3.代码实现

    public interface IStategy
    {
        void DoSomeThing();
    }

    public class ConcreteStategy1 : IStategy
    {
        public void DoSomeThing()
        {

        }
    }


    public class ConcreteStategy2 : IStategy
    {
        public void DoSomeThing()
        {
            
        }
    }

    public class Context
    {
        private readonly IStategy _stategy;
        //构造函数设置具体策略
        public Context(IStategy stategy)
        {
            _stategy = stategy;
        }

        public void DoSomeThing()
        {
            _stategy.DoSomeThing();
        }
    }
    /// <summary>
    /// 场景类
    /// </summary>
    class Program
    {

        private static void Main(string[] args)
        {
            ConcreteStategy1 stategy1 = new ConcreteStategy1();

            Context context = new Context(stategy1);

            context.DoSomeThing();

            Console.ReadKey();
        }

    }

4.策略模式的优缺点

(2)优点

.扩展性良好。在现有的系统中增加一个策略太容易了,只要实现接口就可以了,其他都不用修改。

(1)缺点

.策略类数量增多

.所有的策略类都需要对外暴露,上层模块必须知道有哪些策略,然后才能决定使用哪一个策略。

原文地址:https://www.cnblogs.com/JustYong/p/4588957.html