【原创】设计模式面对面之策略模式
策略模式
策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
类图:
常用的实现方式:
策略
public interface IPolicy { void Operation(); }//end IPolicy
public class PolicyA : IPolicy { public PolicyA(){ } public void Operation(){ Console.WriteLine("使用策略A"); } }//end PolicyA
public class PolicyB : IPolicy { public PolicyB(){ } public void Operation(){ Console.WriteLine("使用策略B"); } }//end PolicyB
策略管理
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
调用
static void Main(string[] args) { var executePolicy = new ExecutePolicy(); executePolicy.Execute();//使用默认策略 executePolicy.ChangePolicy(new PolicyB());//变更策略 executePolicy.Execute(); Console.ReadLine(); }
使用场景:
策略模式常用于某个功能随着客户的需求自由变化的场景。
商场活动经常用到,比如折扣,结算随着折扣的变化而变化,至于用那种折扣由商家决定。
优点
1.新策略扩展方便
2.减少了判断逻辑,只要设置下就好了
缺点
1.只能选择一种策略
多种策略组合使用,需要自己在设计原则的基础上根据业务场景去扩展。