【问题标题】:Stock list - Polymorphism Design库存清单 - 多态设计
【发布时间】:2013-02-06 13:24:23
【问题描述】:

(我使用的是 Java,因此添加了“Java”标签,以防它影响任何答案,但有些人可能会认为该标签是不必要的。)

考虑以下几点:

我有一个阳台/阳台可以用图形进行规划。作为最终计划的一部分,我需要列出建造阳台所需的所有材料。为了简化计算过程,我将阳台分成不同的Sections

甲板上 - 涉及塑料围栏组件和固定件(即螺钉、螺栓)
甲板下 - 涉及木材副框架和更多固定件。

...加上其他我不会深入探讨的内容。


为了争论:由于我们提供不同的围栏设计,有 100 种不同的库存商品可供选择。每件商品都有自己的类别,包括尺寸、颜色、数量及其 ID 参考等信息。

我想做的是创建每个部分所需的修复列表,并将它们全部添加到一个最终列表中,没有任何重复。
最后的想法是在已处理的计划旁边显示项目名称和数量。


例如:

第 1 节要求:
- 25 x 螺丝 A
- 15 x 螺丝 B
- 5 x 螺丝 C

第 2 节要求:
- 25 x 螺丝 A
- 15 x 螺丝 B
- 5 x 螺丝 F

第 3 节要求:
- 45 x 螺丝 B
- 50 x 螺丝 C
- 24 x 螺丝 G

总列表
第 1 节 + 第 2 节 + 第 3 节 = {完整的材料清单}


我尝试过/考虑过的:

我上面提到的所有螺钉都有自己的类,并扩展了超类“紧固件”。上面提到的每个Section都有一个变量:

ArrayList<Fasteners>

所以当我计算时,我可以将螺丝添加到这个变量中。一旦每个部分计算出它需要多少个紧固件,我就会将它们一起添加。

我考虑在“Fasteners”超类中创建一个“add(Fixings)”方法,将所有重复项添加在一起。但是因为有 100 个项目,我认为编码效率不会很高,并且怀疑有更好的方法来利用我在这里设置的多态性。任何在线参考或提示都会有所帮助,非常感谢。

【问题讨论】:

    标签: java polymorphism


    【解决方案1】:

    这里有一个建议:

    创建一个名为 FastenerType 的枚举,然后使用 EnumMap&lt;FastenerType, AtomicInteger&gt; 来保存您的紧固件。我们就叫它包吧。

    然后做类似的事情

    public class FastenerBag {
    
      private Map<FastenerType, AtomicInteger> fasteners = new EnumMap<FastenerType, AtomicInteger>(FastenerType.map);
    
      FastenerBag(){
        // init your ints to zero
      }
    
      public void addFastenersFor(VerandaPart part){
        for (FastenerType type : FastenerType.values()){
          fasteners.get(type).addAndGet(part.getRequiredFasteners().get(type));
        }
      }
    
    }
    

    不要太担心性能。首先让它工作。然后让它可读(重构),然后优化。

    【讨论】:

    • 感谢您的回复。我不熟悉 Enum 和 EnumMap。我做了一个快速搜索,听起来很有希望。我会更深入地研究这个问题并回复你。
    • 您使用 AtomicInteger 是因为我可能使用了线程吗?否则“int”就足够了吗?
    • 我使用它是因为你需要一些东西来包含 int;您也可以一直使用整数并获取并放置它们,但这样写起来更简洁。我使用 AtomicInt 是因为它存在而且我很懒 :) 当然你可以自己写。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多