打折策划问题

问题描述

多个商品采用不同的销售打折策略进行销售;

分析

java面向对象的语言,具有封装多态继承,并且易复用,易操作的特性,因此可以动态的加入一个商品,或者动态的加入一种打折策略。传统的面向过程的方法考虑的是通过if的语句来判断当前是哪个商品,采用的哪种策略,但是如果事先没有想周全,在代码完成的第一版想要添加某些功能,就必须去更改底层的所有代码。

而java具有继承的特点,可以采用接口来实现,将商品的不同种类分为一个类,将打折的策略分为一个类,将商品的统一管理分为一个类(理解为超市)。

首先可以选择用一个接口去与商品对接,即

interface Discount{   //待重写商品接口
    void fruitDiscount();
}

接着定义一个商品的打折策略的接口,即

interface DiscountStrategy{  //该接口用于接收打折的策略
    void DisStrategy(Discount d);
}

然后再在总的管理多种商品的类中的创建这个接口,并采用传参的方式将商品种类对象upcasting到该引用。

public class Strategy {
    Discount fruit;
    Strategy(Discount fruit){
        this.fruit = fruit;
    }
    // 要把打折这个方法写出来
    public void discountStrategying(){
        fruit.fruitDiscount();
    }
}

接着再在每个商品的类中分别实现Discount接口的方法,用于指明该商品的打折策略,即

public class Apple implements Discount{
    private int unitPrice;
    private int weight;
    private int totalPrice;
    private DiscountStrategy appleDicountStrategy = null;
    Apple(int unitPrice, int weight, DiscountStrategy Strategy){
        this.unitPrice = unitPrice;
        this.weight=weight;
        appleDicountStrategy = Strategy;
    }

    public int getUnitPrice() {
        return unitPrice;
    }

    public void setUnitPrice(int unitPrice) {
        this.unitPrice = unitPrice;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public int getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(int totalPrice) {
        this.totalPrice = totalPrice;
    }

    @Override
    public void fruitDiscount() {
        appleDicountStrategy.DisStrategy(this);
    }
}

然后再在打折策略的类中实现DiscountStrategy接口的方法,用于选择不同的打折策略,即

public class AppleDiscountStrategyOne implements DiscountStrategy {

    @Override
    public void DisStrategy(Discount d) {
        Apple apple = (Apple) d;
        System.out.println(apple.getUnitPrice());
        System.out.println(apple.getWeight());
    }


}

最终在main函数中实现

AppleDiscountStrategyOne appleone = new AppleDiscountStrategyOne();  //设置策略类

Apple applee = new Apple(3,10,appleone);

Strategy strategy = new Strategy(applee);
strategy.discountStrategying();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值