【问题标题】:Does having overloaded constructor in inheritance hierarchy signify need for composition?在继承层次结构中重载构造函数是否意味着需要组合?
【发布时间】:2014-03-19 20:07:28
【问题描述】:

假设我有一个用户类,它具有名字、姓氏、地址等基本属性。从这个用户类中,我有内部员工、顾问和客户的子类型,所有这些都需要额外的属性,因此需要将更多参数传递给构造函数,这将违反 Liskov 替换原则。我该如何解决这个看似基本的问题?

【问题讨论】:

  • 据我了解,您不会通过添加属性来更改功能,即使您通过构造函数传递它们也是如此。这是一个例子:Liskov's Substitution Principle(LSP)
  • 好吧,我不能互换地实例化不同的类型,那不会违反 LSP 吗?

标签: php oop design-patterns


【解决方案1】:

您需要为所有新参数提供默认值,这样我们就可以在没有它们的情况下调用构造函数并且不会得到任何新的异常。

如果不符合逻辑,不同的子类型确实需要不同的属性,根据LSP,我们不应该使用继承。

例如,可以使用Traits 代替。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2011-10-28
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2015-09-16
    • 2014-12-22
    相关资源
    最近更新 更多