策略模式类图与代码

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满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()函数
}
相关推荐
星间都市山脉3 分钟前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
namexingyun16 分钟前
拆解Fable 5三重安全护栏:模型路由、蒸馏防护与生物安全分类器的技术原理 - 微元算力(weytoken)
java·人工智能·python·安全·架构·ai编程
地铁潜行者26 分钟前
加了幂等表,为什么消息重试反而不执行了?聊聊 MQ 消费幂等的边界
java·后端
退休倒计时34 分钟前
【每日一题】LeetCode 142. 环形链表 II TypeScript
算法·leetcode·链表·typescript
popcorn_min1 小时前
Digits 手写数字识别:随机森林多分类 + 像素级特征热力图
算法·随机森林·分类
摇滚侠1 小时前
SpringMVC 入门到实战 视图解析器 44-48
java·spring·maven·intellij-idea
記億揺晃着的那天1 小时前
告别误操作!Spring Boot 多环境配置隔离与启动守卫实战
java·spring boot·后端·环境隔离
我是唐青枫1 小时前
Java Spring Data JPA 实战指南:Repository 查询、分页与实体映射
java·开发语言
liulilittle2 小时前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
染翰2 小时前
Nacos 切换 Namespace 后配置不生效、占位符报错终极复盘
java·后端·spring·nacos