策略模式类图与代码

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满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()函数
}
相关推荐
血色橄榄枝2 小时前
基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
人工智能·算法·机器学习
Java搬码工2 小时前
CompletableFuture 完整详解 + 全场景使用案例
java
许心月3 小时前
Java学习资料网站汇总
java
c238563 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
帅次3 小时前
Kotlin 与 Java 互操作:混合工程里的平台类型与 API 边界
java·开发语言·kotlin·suspend·nullable
六点_dn3 小时前
Linux学习笔记-printf命令
linux·运维·算法
X-⃢_⃢-X4 小时前
一、第一阶段:认识 Spring Boot
java·spring boot·后端
前端工作日常4 小时前
我学习到的Java程序的生命周期
java·后端
SunnyDays10114 小时前
Java 实现 PDF 页面删除、排序、旋转和裁剪
java·pdf
遥感知识服务4 小时前
Sentinel-1 + DEM + FwDET + 随机森林:从快速水深初估到多因子误差修正
算法·随机森林·sentinel