题目:

使用策略模式实现商场收银程序,满足商场随时可能会变化的优惠活动的需求,具体描述如下:

收费模式现有3种:

1、正常收费

2、打折(80%)

3、满减(满300减100)


类图:

策略模式案例

代码:

package Strategy;

import java.util.Scanner;

interface CashSuper
{
    double acceptCash(double money);
};

//1、正常收费


class CashNormal implements CashSuper
{
    public double acceptCash(double money) { return money; }
};
//2、打折

class CashRebate implements CashSuper
{
    private double moneyRebate;
    CashRebate(double moneyRebate){ this.moneyRebate = moneyRebate; }
    public double acceptCash(double money) { return money*moneyRebate; }
};

//3、满减
class CashReturn implements CashSuper
{
    private double moneyCondition;
    private double moneyReturn;
    
    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 = null;
    CashContext(int type)
    {
        switch (type)
        {
        case 1:
            cs = new CashNormal();
            break;
        case 2:
            cs = new CashRebate(0.8);
            break;
        case 3:
            cs = new CashReturn(300, 100);
            break;
        }
    }
    public double GetResult(double money){ return cs.acceptCash(money); }
};

public class Cash {
    public static void main(String[] args){
        CashContext cc;
        System.out.println("请输入收费类型:1、正常收费 2、打折 3、满减" );
        Scanner scanner = new Scanner(System.in);
        int type = scanner.nextInt();
        scanner.close();
        cc = new CashContext(type);
        System.out.println("应收费: " + cc.GetResult(800));

    }
}


结果:

策略模式案例

相关文章: