Java设计模式-如何在产品和购物车上应用优惠
我正在开发一个购物车应用程序,它将输出购物车的价格。 我有三个类,购物车,产品Java设计模式-如何在产品和购物车上应用优惠,java,design-patterns,Java,Design Patterns,我正在开发一个购物车应用程序,它将输出购物车的价格。 我有三个类,购物车,产品 public class Product { private int id; private String name; private double price; Offer offer; // getter setter public double getPrice(int quantity) { return offer.getPrice....
public class Product {
private int id;
private String name;
private double price;
Offer offer;
// getter setter
public double getPrice(int quantity) {
return offer.getPrice....
}
}
public class Purchase {
Product product;
int quantity;
// getter setter
public double getPrice() {
return product.getPrice(quantity);
}
}
public class Cart {
List<Purchase> purchase = new ArrayList<Purchase>();
Offer offer;
Integer loyalityPoints;
//getter setter
public double getTotal(){
double total = 0;
for (Purchase purchase : purchase) {
total += purchase.getPrice();
}
double finalPrice = offer.getPrice(total,....;
return finalPrice;
}
}
公共类产品{
私有int-id;
私有字符串名称;
私人双价;
要约;
//吸气剂设定器
公共双倍价格(整数数量){
返回报价。获取价格。。。。
}
}
公共类购买{
产品;
整数;
//吸气剂设定器
公开双价{
返回产品。获取价格(数量);
}
}
公共类购物车{
列表购买=新建ArrayList();
要约;
整数忠诚点数;
//吸气剂设定器
公共双getTotal(){
双倍合计=0;
用于(采购:采购){
合计+=采购。getPrice();
}
双倍最终价格=报价。获取价格(总计,。。。。;
返回最终价格;
}
}
如上所示,单个产品可以有优惠,购物车也可以有优惠
起初,我想到了一家工厂。
OfferPrice可以是抽象类&它的子类可以是buyonegetoneprice、buytwogetoneprice、50PrecentOnOffPrice,但buyonegetoneprice的输入将是数量,而50PrecentOnOffPrice的输入和价格是唯一的价格
这意味着有两种不同的方法,但OfferPrice的实现者只关注一种实现
此外,购物车上的优惠是什么样子的?购物车上的优惠可以基于客户忠诚度点数或50%折扣或其他
如何以可扩展的方式为购物车和单个产品设计这些优惠?从您的示例中,您可能需要不同的优惠策略。在我看来,您应该使用接口将这三个类松散耦合。创建优惠策略和子类,如基于产品的优惠、基于价格的优惠等 这看起来还可以从规则引擎中获益(您可以动态更改整个应用程序的报价,而无需停止应用程序) 以下是我的设计建议(每个类的接口,封装内部使用规则的不同提供算法的策略): *Ixxx代表接口,