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

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

  • 相关阅读:
    Mvc form提交
    FlexiGrid 使用 全选、自动绑定
    Mysql Insert Or Update语法例子
    orderby与groupby同时使用
    SQLSTATE[HY000] [2002] No such file or directory in
    swoole安装
    关于商城分类查询表结构与数据查询
    查询数据库每张表的信息
    php 正则验证
    PHP代码优化
  • 原文地址:https://www.cnblogs.com/dujq/p/7832420.html
Copyright © 2011-2022 走看看