首页 > 代码库 > 设计模式—策略模式

设计模式—策略模式

什么是策略模式?

    策略模式定义了算法家族,分别封装起来,让它们之间能够相互替换,此模式让算法的变化不会影响到使用算法

的客户。

    策略模式是一种定义一系列算法的方法,从概念上看全部这些算法完毕的都是同样的工作,仅仅是实现不同,它可

以以同样的方式调用全部的算法,降低了各种算法类与使用算法之间的耦合。

策略模式的长处?

    (1)策略模式的Strategy类层为Context类定义了一系列的可供重用的算法和行为。继承有助于析取出这些算法

的公共功能。

    (2)简化了单元測试(每一个算法都有自己的类,能够通过自己的接口单独測试)

策略模式的不足?

    Context中包括了switch语句,改动需求时须要改Context中的代码。(解决的方法,反射技术)

策略模式的使用条件?

    策略模式是用来封装算法的,但在实践中,我们发现能够用它来封装差点儿不论什么类型的规则,仅仅要在分析过程中听

到要在不同一时候间应用不同的业务规则,就能够考虑利用策略模式处理这样的变化的可能性。

    Eg:

    (1)产品之于加减乘除,水果之于苹果梨橘子香蕉,文具之于笔尺刀,这时产品比較详细、有限和没有多个算

法重叠,这时有用简单工厂模式。

    (2)产品之于商场促销中的返利(可为300返100、500返200、10000返500等等无数)、折扣(2折、2.5折、6

折、9折、9.1折等等无数)、正常购买、消费积分(100元10积分、200元30积分等等无数),这时产品构造又多次重

叠,且有在不同一时候刻应用不同的规则时使用策略模式。

策略模式的结构图?



简单工厂与策略模式的差别与联系?

    简单工厂模式仅仅是攻克了对象的创建问题,工厂须要包含全部的产品对象的创建,假设产品对象形式常常变化,

就须要常常修改工厂,以致代码又一次编译。所以策略模式就诞生了,策略模式---它定义了算法家族,分别封装起

来,而不是像简单产品模式一样定义全部的产品类,让他们之间能够互相替换,此模式让算法的变化,不会影响到使

用算法的客户,使客户拥有同样的訪问过程。

简单工厂和策略模式两个核心?

    简单工厂的核心:封装全部的产品对象

    策略模式的核心:封装算法

实战:商场促销系统结构图与代码展示 

    (1)商场促销UML图



    (2)CashContext类中的代码

                        

<span style="font-family:KaiTi_GB2312;font-size:18px;">class CashContext
{
    CashSuper cs = null;           //声明一个CashSuper变量
    
    public CashContext(string type)
    {
        switch (type)                //将实例化集体策略的过程由client转移到Context类中,简单工厂的应用
        {
            case "正常收费":
                CashNomal cs0 = new CashNomal();
                cs=cs0;
                break;
            case "满300返100":
                CashReturn cr1 = new CashReturn("300","100");
                cs = cr1;
                break;
            case "打8折";
                CashRebate cr2 = new CashRebate("0.8");
                cs = cr2;
                break;
        }
        
        public dopuble GetResult(double money)
        {
            return cs.acceptCash(money);
        }
    }
}</span>