策略模式类图与代码

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

【Java 代码】

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()函数
}
相关推荐
To_OC7 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
2401_841495647 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
爱刷碗的苏泓舒11 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199412 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端