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