zoukankan      html  css  js  c++  java
  • 【原创】设计模式面对面之策略模式

    策略模式

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

    类图:

     

    常用的实现方式:

    策略

    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.只能选择一种策略

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

  • 相关阅读:
    C++小记
    滑窗问题总结
    leetcode 350 easy
    C++中的 istringstream 的用法
    leetcode 235-290 easy
    leetcode 198-234 easy
    CNN 常用的几个模型
    leetcode 60-80 easy
    python 正则的使用例子和goupby
    leetcode 31-40 easy
  • 原文地址:https://www.cnblogs.com/dujq/p/7832420.html
Copyright © 2011-2022 走看看