【原创】设计模式面对面之策略模式

策略模式

策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

类图:

 

常用的实现方式:

策略

public interface IPolicy  {

        void Operation();
    }//end IPolicy
View Code
public class PolicyA : IPolicy {

        public PolicyA(){

        }

        public void Operation(){
            Console.WriteLine("使用策略A");
        }

    }//end PolicyA
View Code
public class PolicyB : IPolicy {

        public PolicyB(){

        }

        public void Operation(){
            Console.WriteLine("使用策略B");
        }

    }//end PolicyB
View Code

策略管理

public class ExecutePolicy {

        public IPolicy Policy;

        public ExecutePolicy(){
            Policy=new PolicyA();//设置默认策略
        }

        /// 
        /// <param name="policy"></param>
        public void ChangePolicy(IPolicy policy)
        {
            Policy = policy;
        }

        public void Execute(){
            Policy.Operation();
        }

    }//end ExecutePolicy
View Code

调用

 static void Main(string[] args)
        {
          
            var executePolicy = new ExecutePolicy();

            executePolicy.Execute();//使用默认策略

            executePolicy.ChangePolicy(new PolicyB());//变更策略
            executePolicy.Execute();

            Console.ReadLine();


        }
View Code

 使用场景:

 策略模式常用于某个功能随着客户的需求自由变化的场景。

商场活动经常用到,比如折扣,结算随着折扣的变化而变化,至于用那种折扣由商家决定。

 

优点

1.新策略扩展方便

2.减少了判断逻辑,只要设置下就好了

缺点

1.只能选择一种策略

 

多种策略组合使用,需要自己在设计原则的基础上根据业务场景去扩展。

 

posted @ 2017-11-14 15:44  杜俊强  阅读(129)  评论(0编辑  收藏  举报