策略模式

        设计一款商场收银软件,营业员根据客户所购买商品的单价和数量,向客户收费。那么如何用策略模式实现呢?

        策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换 。此模式让算法的变化,不会影响到使用算法的客户。

策略模式结构图

 

商场收银系统策略图


代码实现

CashContext类。其它类省略……

<span style="font-size:18px;"> class CashContext
    {
        CashSuper cs = null;  //声明一个CashSuper对象
        public CashContext (string type)//type为字符串,表示收费类型
        {
            switch (type )
            {
                case "正常收费":
                    CashNormal cs0 = new CashNormal();
                    cs = cs0;
                    break;
                case "满300返100":
                    CashReturn cs1 = new CashReturn("300","100");
                    cs = cs1;
                    break;
                case "打8折":
                    CashRebate  cs2 = new CashRebate("0.8");
                    cs = cs2;
                    break;
            }
  
        }
        public double GetResult(double money)
        {
            return cs.acceptCash(money);  //根据具体的策略对象,调用其算法的方法
        }

    }</span>
客户端代码

<span style="font-size:18px;"> double total = 0.0d;

        private void btnOk_Click(object sender, EventArgs e)
        {
            CashContext csuper = new CashContext(cbxType.SelectedItem.ToString());//策略模式简单工厂结合
            
            double totalPrices = 0d;
            totalPrices = csuper.GetResult(Convert.ToDouble(txtPrice.Text) * Convert.ToDouble
                (txtNum.Text));
            total = total + totalPrices;
            lbxList.Items.Add("单价:" + txtPrice.Text + "数量:" + txtNum.Text
                + " " + cbxType.SelectedItem + "合计" + totalPrices.ToString());
            lblResult.Text = total.ToString();
        }</span>
           策略模式就是用来封装算法的。策略模式+简单工厂模式,减轻了客户端的职责。

           利用反射,当增加算法时,可以省去Switch语句 的更改。埋下伏笔,神奇的反射……




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值