有人可以解释一下我什么时候想使用委托而不是继承吗?

有帮助吗?

解决方案

如果要“复制”/公开基类'API,则使用继承。 当你只想“复制”时功能,使用委托。

这方面的一个例子: 您想要从列表中创建堆栈。堆栈只有pop,push和peek。鉴于您不希望在堆栈中使用push_back,push_front,removeAt等等功能,您不应该使用继承。

其他提示

他们彼此无关。授权是一种行为。继承是一种模型技术。

继承用于建模“is-a”。计算机“is-a”是指计算机。电子系统。

委托是方法如何提供结果。有时,一个对象会将工作委托给另一个对象。委托可以通过任何关系 - 您可以委托给超类,复合或聚合的成员,或任何关系。

您可以将委托用于多个内部类实例,以将其功能简化为通用分组。如果您的语言没有实现多重继承,那么您可以从其中一个基础继承并包装另一个,将您要公开的功能委托给底层实现。继承还会将您的类绑定到您继承的类的层次结构中,您可以将其保存在自己的层次结构中,并将调用委托给另一个层次。

假设您的类称为 B,并且派生/委托给类的类称为 A,则

以下是使用继承或委托时的一些示例:
如果

  • 如果你想表达关系(is-a)那么你想使用继承。
  • 如果您希望能够将您的类传递给需要 A 的现有 API,那么您需要使用继承。
  • 你想增强A,但A是最终的,不能进一步子类化,那么你需要使用组合和委托。

在我看来,当使用和继承被嵌入时,可以调用委托。

in_threads gem 为例,它使用InThreads委托程序为任何Ruby Enumerable模块实现线程。有了这个,只在数组上调用in_threads方法,它将在线程中运行。

我同意@Anzurio。只是用简单的话来解释:

  

仅当您认为新类是现有类的自然扩展时才使用继承。更喜欢将组合/委托用于所有其他目的,例如使用特定方法等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top