当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 大话设计-策略模式

大话设计-策略模式

2020年03月09日  | 移动技术网IT编程  | 我要评论

记录大话设计的学习。大话设计模式pdf分享:https://pan.baidu.com/s/11h9x-4rffxydf3gfh5_y7g 提取码:x5c3 。

上一篇通过超市优惠结账的例子学习了。这一篇在简单工厂上继续加工,让它变成一种策略模式。

每一种优惠算法都是一个具体的策略,它们抽象出来一个共同的策略就是返回结账数额。通过cashcontext创建实例,调用策略,简化了使用算法类和算法类之间的耦合。在这里客户端不同知道具体使用了哪种策略,甚至是结账金额是否通过了几种策略的混合计算(举例:传入"满900减100;8折",就使用了cashrebate和cashreturn)。

using system;

namespace consoleapp4
{
    class program
    {
        public static void main(string[] args)
        {
            var cashcontext = new cashcontext("8折");
            var result = cashcontext.getresult(900);
        }
    }

    public class cashcontext
    {
        cashsuper cashsuper;
        public cashcontext(string type)
        {
            switch (type)
            {
                case "满300减50": cashsuper = new cashreturn(300d, 50d); break;
                case "8折": cashsuper = new cashrebate(0.8d); break;
                default: cashsuper = new cashnormal(); break;
            }
        }
        public double getresult(double money)
        {
            return cashsuper.acceptcash(money);
        }
    }

    public abstract class cashsuper
    {
        public abstract double acceptcash(double money);
    }

    public class cashnormal : cashsuper
    {
        public override double acceptcash(double money)
        {
            return money;
        }
    }

    public class cashrebate : cashsuper
    {
        private double rebate;

        public cashrebate(double rebate)
        {
            this.rebate = rebate;
        }

        public override double acceptcash(double money)
        {
            return money * rebate;
        }
    }

    public class cashreturn : cashsuper
    {
        private double moneycondition;
        private double moneyreturn;
        public cashreturn(double condition, double @return)
        {
            moneycondition = condition;
            moneyreturn = @return;
        }
        public override double acceptcash(double money)
        {
            if (money >= moneycondition)
            {
                return money - ((money / moneycondition) * moneyreturn);
            }
            else
            {
                return money;
            }
        }
    }    
}

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网