策略模式类图与代码

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100),等等。现采用策略(Strategy)模式实现该要求,得到如图7.13 所示的类图。

【Java 代码】

import java.util.*;
enum TYPE { NORMAL,CASH_DISCOUNT,CASH_RETURN};
interface Cashsuper {
    public double acceptCash(double money);
}
class CashNormal implements CashSuper{// 正常收费子类
    public double accptCash(double money){
        return money;
    }
}
class CashDiscount implements Cashsuper {
    private double moneyDiscount;    //折扣率
    public CashDiscount(double moneyDiscount){
        this moneyDiscount = moneyDiscount;
    }
    public double acceptCash(double money){
        return money* moneyDiscount;
    }
}
class CashReturn implements Cashsuper {  //满额返利
    private double moneyCondition;
    private double moneyReturn;
    public CashReturn(double moneyCondition, double moneyReturn){
        this.moneycondition =moneyCondition;//满额数额
        this.moneyReturn =moneyReturn;//返利数额
    }
    public double acceptCash(double money){
        double result = money;
        if (money >= moneyCondition )
            result=money-Math.floor(money/moneyCondition )* moneyReturn;
        return result;
    }
}
class CashContext_{
    private Cashsuper cs;
    private TYPE t;
    public CashContext(TYPE t){
        switch(t){
            case NORMAL;// 正常收费
                cs= new CashNormal();
                break;
            case CASH RETURN;//满300返100
                cs = new CashReturn(300,100);
                break;
            case CASH_ DISCOUNT;//打8折
                cs =new CashDiscount(0.8);
                break;
        }
    }
    public double GetResult(double money){
        return cs.acceptCash(money);
    }
    //此处略去main()函数
}

相关推荐

  1. 策略模式详解+代码案例

    2024-04-12 07:38:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 07:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 07:38:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 07:38:02       82 阅读
  4. Python语言-面向对象

    2024-04-12 07:38:02       91 阅读

热门阅读

  1. 用php编写网站源码的一些经验

    2024-04-12 07:38:02       42 阅读
  2. 如何在 OpenLDAP 服务器上更改账户密码

    2024-04-12 07:38:02       53 阅读
  3. ubuntu下利用ffmpeg工具将视频帧推流至rtsp

    2024-04-12 07:38:02       47 阅读
  4. 0基础刷图论最短路 2(从ATcoder 0分到1800分)

    2024-04-12 07:38:02       39 阅读
  5. Golang教程四(协程,channel,线程安全,syncMap)

    2024-04-12 07:38:02       183 阅读
  6. Pytorch 获取当前模型占用的 GPU显存的大小

    2024-04-12 07:38:02       40 阅读
  7. 动态开辟字符串malloc

    2024-04-12 07:38:02       53 阅读
  8. vue监听键盘回车事件的三种方法

    2024-04-12 07:38:02       49 阅读