zoukankan      html  css  js  c++  java
  • 2.策略模式

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

    抽象策略角色:策略类,通常由一个接口或者抽象类实现。

    具体策略角色:包装了相关的算法和行为。

    环境角色:持有一个策略类的引用,最终给客户端调用。

    示例

    Stategy(抽象策略类)定义了一个公共接口,各种不同的算法以不同的方法实现这个接口,context使用这个接口调用不同的算法,一般使用接口或者抽象类实现。

        //抽象算法类
        public abstract class Starategy
        {
            //算法方法
            public abstract void AlgorithmInterface();
        }


    具体策略类:实现Stategy定义的接口,提供具体的算法实现

        //具体算法A
        public class ConcreteStrategyA:Starategy
        {
            
            public override void AlgorithmInterface()
            {
                //do somthing
            }
        }


    Context应用场景:

        //用一个算法类来配置,维护一个对Strategy对象的引用
        public class Context
        {
            Starategy star;
            //初始化,传入具体的策略对象
            public Context(Starategy star)
            {
                this.star = star;
            }
    
            //根据具体的策略对象,调用其算法的方法
            public void ContextInterface()
            {
                star.AlgorithmInterface();
            }
    
        }


    客户端实现

                Context context = new Context(new ConcreteStrategyA());
                context.ContextInterface();

     策略模式与简单工厂模式

     public class Context
        {
            CashSuper cs = null;
            
            public Context(string type)
            {
    
                switch (type)
                {
                    case "正常收费":
                        CashNormal cs0 = new CashNormal();
                        break;
                    case "打八折":
                        CashRebate cs1 = new CashRebate("0.8");
                        break;
                }
            }
    
            
            public double CetResult(double money)
            {
                return cs.acceptCash(money);
            }
    
        }

    客户端调用

    CashContext csuper=new CashCont("0.8");

     策略模式是之中定义一些列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所用的算法,减少了各种算法类与使用算法类之间的耦合。

    策略模式的Strategy类层次为Context定义了一系列的可供重用的算法和行为,继承有助于析取出这些算法中的公共功能。

    优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

  • 相关阅读:
    前端 http协议 四大特性 web本质 -响应状态码 列表标签 表单操作 form表单 # 44 HTML
    断点传续 # 补充 mysql
    优酷系统 # 41-43
    css控制 只显示一行 强制不换行 超出用...表示
    点击返回上一页面
    jquery实现点击按钮变换背景颜色
    js,同意后,才可已点击注册按钮
    用div+css生存太极图案
    使用tp5,显示页面错误信息
    vue项目搭建步骤
  • 原文地址:https://www.cnblogs.com/xyangs/p/2575965.html
Copyright © 2011-2022 走看看