有人可以解释我何时想使用委托而不是继承?
答案 0 :(得分:57)
如果要“复制”/公开基类的API,则使用继承。 如果您只想“复制”功能,请使用委托。
这方面的一个例子: 您想要从列表中创建堆栈。堆栈只有pop,push和peek。鉴于您不希望在堆栈中使用push_back,push_front,removeAt等等功能,您不应该使用继承。
答案 1 :(得分:26)
他们彼此无关。授权是一种行为。继承是一种模型技术。
继承用于建模“is-a”。计算机“是一个”电子系统。
委托是方法如何提供结果。有时,一个对象会将工作委托给另一个对象。委托可以通过任何关系 - 您可以委托给超类,复合或聚合的成员,或任何关系。
答案 2 :(得分:4)
您可以将委托用于多个内部类实例,以将其功能简化为通用分组。如果您的语言没有实现多重继承,那么您可以从其中一个基础继承并包装另一个,将您要公开的功能委托给底层实现。继承还会将您的类绑定到您继承的类的层次结构中,您可以将其保存在自己的层次结构中,并将调用委托给另一个层次。
答案 3 :(得分:3)
假设您的类名为B,派生/委托给类的名称为A然后
以下是使用继承或委托时的一些示例:
如果
答案 4 :(得分:1)
在我看来,当使用和继承被嵌入时,可以调用委托。
以the in_threads gem为例,它使用InThreads委托器为任何Ruby Enumerable模块实现线程。有了这个,只在数组上调用in_threads方法,它将在线程中运行。
答案 5 :(得分:0)
我同意@Anzurio。只是简单地解释一下:
仅当您认为新类是现有类的自然扩展时才使用继承。优先将合成/委派用于其他所有目的,例如使用特定方法等。