【发布时间】:2020-06-26 20:47:57
【问题描述】:
我看了一篇关于第三个SOLID原则的有趣文章:https://stackify.com/solid-design-liskov-substitution-principle/
同时,我读到使用instanceof 运算符可能违反了 SOLID 规则。以下问题如何处理。
我有两个类(伪代码):
CoffeeMachine {
brewCoffee();
}
PremiumCoffeeMachine extends CoffeeMachine {
brewCoffee()
brewEspresso()
}
然后在程序的某个地方我得到了一些咖啡机
Set<CoffeeMachine> coffeeMachines
现在我想用每台咖啡机煮咖啡。我怎么知道我可以在不使用 instanceof 运算符的情况下制作浓缩咖啡?
也许这是唯一的方法,但我今天读到很多次instanceof 运算符破坏了 SOLID
您知道一篇有趣的文章,或者您能提供解决此类问题的方法吗?也许我错了,SOLID 说子类不应该包含额外的方法?
【问题讨论】:
-
instanceof 不会破坏 SOLID。您提供的链接上表达的想法是 brewCoffee 的合同不应该在子类中更严格,因为这违反了合同。实际上 Java 不会让你这样做
-
你为什么想知道它是浓缩咖啡?
CoffeeMakeI可以brewCoffee()。如果您想要浓缩咖啡,只需将您的CoffeeMachine换成PremiumCoffeMachine,它应该覆盖brewCoffee(而不是brewEspresso)。 -
PremiumCoffeeMachine 有 2 个功能。它可以冲泡简单的咖啡和浓缩咖啡,也许还有其他类型。我想知道我是否可以这样做,因为我更喜欢浓缩咖啡。
标签: java oop solid-principles instanceof