假设我有一个产品类{字符串名称;双倍价格; ...}
因此,如果我想实施季节性或折扣产品,我可以添加声明isPromoted / isSeasonal或者我可以创建一个新类promoteProduct:Product {...},seasonalProduct:Product {}等等。 / p>
我被告知初学者倾向于滥用继承以及它是如何邪恶的。所以我不确定在这种情况下我是否被认为是滥用。或者他们都错了,使用界面更好等。
答案 0 :(得分:1)
产品是否只是促销 - 即 - 没有实际的促销细节(不同的价格,日期等) - 如果你想要你的第一个解决方案。否则,您需要与Promotions类建立关系,以便存储此类详细信息。
希望这有帮助。
注意:这是一个从未使用过Java的通用编程答案。
答案 1 :(得分:1)
一个好的经验法则是将哪些变化与不变化分开。
您无法在运行时更改类型,但您可能希望能够轻松地推广/降级产品。
一种选择是将状态直接存储在Product作为字段(但如果它们累积,则会变得很难看,isLowInStock等)。
可能更好的操作系统将产品视为一个实体,并通过以下方式将isPromoted / isSeasonal状态分开:
使用#1防范未来的变化(即更多字段)。 #2可能有点矫枉过正。
请勿使用双倍代表价格 - 请参阅this question或google。
答案 2 :(得分:0)
季节性或折扣产品是否会添加属性?他们有不同的行为吗?这就是推动继承的原因。我怀疑行为没有真正的区别,他们携带的属性也没有真正的区别。
因此,我将折扣视为每种产品都具有的属性:任何产品都可以进行销售并获得折扣,因此我会有一个属性,指示当前的折扣百分比或金额(可能默认为零,或者它可以为空。同样适用于季节性:应该只是一个布尔标志吗?