链式产品的OOP设计模式

时间:2018-10-29 16:41:52

标签: algorithm oop design-patterns

我需要设计一个涉及定制产品的链式模型。

基本上,我有一个CDROM本身就是产品。然后,我可能有一个CDROM盒,这是另一个值为10 CDROM的产品,我又可能有一个CDROM包,其值为10 CDROM盒(= 100 CDROM)。

要恢复1个CDROM包= 10个CDROM盒= 100个CDROM

然后我需要确定给定产品的价格,例如,让我获得1个CDROM软件包,我想建立一条链来获取所有相关产品及其转化率。

我正在寻找一种涉及OOP而不是“算法”的解决方案。

1 个答案:

答案 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操作来在层次结构上进行聚合。