oop - 可以采用哪些方法来使用组合而不是继承?

标签 oop inheritance composition

<分区>

我有一个带有 Quotations Controller 的 Web 应用程序(在 ASP.NET MVC 中)。该 Controller 可以处理多种报价类型、MotorQuotation、PropertyQuotation 等...

目前它正在使用继承,即 Quotation 模型及其子模型,来对域进行建模。不同的子类在它们存储的数据上存在差异,而不是在它们的行为上存在差异。它们的验证方法会带来行为上的差异,因为验证可能会有所不同,具体取决于子类可能存储的唯一字段。

问题是有人会如何使用组合而不是继承来为引用对象建模?

最佳答案

根据您描述问题的方式,这听起来像是使用继承的好案例。经验法则是,如果 A 是 B,则使用继承;如果 A 是根据 B 实现的,则使用组合。

推荐使用组合而不是继承并不意味着“永远不要使用继承”。这意味着适本地使用继承。例如,如果您使用 std::vector 在 C++ 中编写一个 Stack 类,您不想从 派生 Stack >矢量Stack 不是vector,它是根据vector 实现的,这意味着组合。您还希望避免创建深层类层次结构,因为这会导致紧密耦合。

但是,对于您的情况,继承似乎是一个显而易见的选择。

关于oop - 可以采用哪些方法来使用组合而不是继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950462/

相关文章:

Java组合(has-a)关系澄清

java - 在 JTextField 中创建用户无法在 java 中编辑的文本

c++ - 通过从具体类派生来填充抽象类成员

c++ - 如何访问其派生类的 protected 成员。如果派生类中已声明具有相同名称的函数?

java - 构造函数有问题吗?

java - 无法使用组合访问类方法?

c - C中的面向对象

c# - 它不会返回类中的值

php - 您将如何为这个应用程序建模?

function - Clojure实践——使用复杂数据类型及其元素的函数?