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定义了一系列的可供重用的算法和行为,继承有助于析取出这些算法中的公共功能。

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

  • 相关阅读:
    Linux数据备份
    eclipse 中使用等宽字体 inconsolata
    在ubuntu14.04 64位中使用jd-gui
    Fragment 常见问题
    ClassNotFoundException
    符号表的简单使用
    一个简单的词法分析器
    一个简单的语法分析器(后缀式转换)
    火狐无法显示图片
    ftp 匿名访问设置
  • 原文地址:https://www.cnblogs.com/xyangs/p/2575965.html
Copyright © 2011-2022 走看看