我需要设计一个涉及定制产品的链式模型。
基本上,我有一个CDROM本身就是产品。然后,我可能有一个CDROM盒,这是另一个值为10 CDROM的产品,我又可能有一个CDROM包,其值为10 CDROM盒(= 100 CDROM)。
要恢复1个CDROM包= 10个CDROM盒= 100个CDROM
然后我需要确定给定产品的价格,例如,让我获得1个CDROM软件包,我想建立一条链来获取所有相关产品及其转化率。
我正在寻找一种涉及OOP而不是“算法”的解决方案。
答案 0 :(得分:0)
这些片段使用 Java ,但是原理(接口和组成)适用于任何OO语言。
为常用操作定义一个接口(我认为您想获得整个包装的价格,但是该原理适用于任何汇总操作)。
public interface IPrice {
Double getPrice();
}
使所有实体都实现IPrice
接口,并使用合成来定义实体之间的关系。
CDROM实体:
public class CDROM implements IPrice {
@Override
public Double getPrice() {
return 1;
}
}
CDBox实体:
public class CDBox implements IPrice {
private List<CDROM> cds;
@Override
public Double getPrice() {
// Note: you could refactor the below snippets to streams
int childPrice = 0;
for(int i = 0 ; i < cds.size() ; i ++) {
childPrice += cds.get(i).getPrice();
}
// add any box associated costs
return childPrice;
}
}
CDPackage实体:
public class CDPackage implements IPrice {
private List<CDBox> boxes;
@Override
public Double getPrice() {
int childPrice = 0;
for(int i = 0 ; i < boxes.size() ; i ++) {
childPrice += boxes.get(i).getPrice();
}
return childPrice;
}
}
然后您可以通过在层次结构根目录上调用getPrice
操作来在层次结构上进行聚合。