繁体   English   中英

将变量的数据传递给另一个 class

[英]Passing data of a variable to another class

编辑进一步澄清。

我正在尝试构建一个简单的 api 来处理我的简单 MySQL 数据库上的 CRUD 操作,用于我的简单订购 Web 应用程序。 然后将在 Angular 上使用 api。

基本上,订购系统的条件是选定的订单有 5% 的折扣,所以这将是 DiscountedBill 的工作来计算它会是多少。 其他项目没有折扣,因此将由RegularBill工作来计算。

正如我在此图上所理解的那样,如果用户在我的系统上有 DiscountedBill 和 RegularBill 订单,OrderBill class 将必须计算所有订单的总数。

图表

那可能吗?

这是主要的 OrderBill class。

public class OrderBill {

    private List<Order> orderList;
    private CafeClerk clerk;

    public OrderBill(CafeClerk clerk) {
        this.clerk = clerk;
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public CafeClerk getClerk() {
        return clerk;
    }

    public void setClerk(CafeClerk clerk) {
        this.clerk = clerk;
    }

    public double getTotalBill() {
        // function here to add the computed data of both DiscountedBill + RegularBill
        return 0;
    }
}

常规比尔 class –

public class RegularBill extends OrderBill {

    public RegularBill(CafeClerk clerk) {
        super(clerk);
    }

    double totalRegBill = 0.0;

    @Override
    public double getTotalBill() {
        for (Order order : super.getOrderList()) {
            totalRegBill += (order.getPrice());
        }
        return totalRegBill;
    }

    public double getTotalRegBill() {
        return totalRegBill;
    }

    public void setTotalRegBill(double totalRegBill) {
        this.totalRegBill = totalRegBill;
    }
}

DiscountedBill class –

public class DiscountedBill extends OrderBill {

    public DiscountedBill(CafeClerk clerk) {
        super(clerk);
    }

    final double DISCOUNT = 0.05;
    double totalDiscBill = 0.0;

    @Override
    public double getTotalBill() {
        for (Order order :super.getOrderList()) {
            totalDiscBill += (order.getPrice() - DISCOUNT);
         }
        return totalDiscBill;
    }

    public double getTotalDiscBill() {
        return totalDiscBill;
    }

    public void setTotalDiscBill(double totalDiscBill) {
        this.totalDiscBill = totalDiscBill;
    }
}

我不确定我是否正确理解了目的,但是如果您想总结OrderBill中的DiscountedBillRegularBill ,您不是更需要这样的结构吗?

public class OrderBill {

    private List<Order> orderList;
    private CafeClerk clerk;
    private RegularBill regularBill;
    private DiscountedBill discountedBill;

    public OrderBill(CafeClerk clerk) {
        this.clerk = clerk;
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public CafeClerk getClerk() {
        return clerk;
    }

    public void setClerk(CafeClerk clerk) {
        this.clerk = clerk;
    }

    public double getTotalBill() {
        return regularBill.getTotalBill(orderList) + discountedBill.getTotalBill(orderList);
    }
}
public class RegularBill {

    public RegularBill() {}

    double totalRegBill = 0.0;

    public double getTotalBill(List<Order> orders) {
        for (Order order : orders) {
            totalRegBill += (order.getPrice());
        }
        return totalRegBill;
    }

    public double getTotalRegBill() {
        return totalRegBill;
    }

    public void setTotalRegBill(double totalRegBill) {
        this.totalRegBill = totalRegBill;
    }
}
public class DiscountedBill {

    public DiscountedBill() { }

    final double DISCOUNT = 0.05;
    double totalDiscBill = 0.0;

    public double getTotalBill(List<Order> orders) {
        for (Order order : orders) {
            totalDiscBill += (order.getPrice() - DISCOUNT);
        }
        return totalDiscBill;
    }

    public double getTotalDiscBill() {
        return totalDiscBill;
    }

    public void setTotalDiscBill(double totalDiscBill) {
        this.totalDiscBill = totalDiscBill;
    }
}

当然,增强这个解决方案是必要的。 但这可能已经是一个暗示。 然后,您可以使用 getTotalBill() 方法实现接口。

如果我理解正确,你可以这样做:

public DiscountedBill(RegularBill bill) {
    this.setOrderList(bill.getOrderList);
    this.setClerk(bill.getClerk());
}

@Override
public double getTotalBill() {
    for (Order order :this.getOrderList()) {
        totalDiscBill += (order.getPrice() - DISCOUNT);
     }
    return totalDiscBill;
}

注意:如果我猜对了,你只是减去 0.05,而不是 %,应该是:

@Override
public double getTotalBill() {
    for (Order order :this.getOrderList()) {
        totalDiscBill += (order.getPrice() - (order.getPrice() * DISCOUNT));
     }
    return totalDiscBill;
}

但这只是一个猜测,我认为你试图归档什么。

如果您需要重新创建此图,那么我的提示是您将OrderBill抽象化,并且getTotalBill()仅对RegularBillDiscountedBill感兴趣。

您不能用给定的结构在OrderBill中真正将这两个类相加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM