策略模式

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)缺点

.策略类数量增多

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

你可能感兴趣的:(策略模式)