何时使用委托而不是inheritance?
有人可以解释什么时候我想要使用代表团而不是inheritance?
当你想“复制”/公开基类的API,你使用inheritance。 当您只想“复制”function时,请使用委派。
其中一个例子:你想从列表中创build一个堆栈。 堆栈只有pop,push和peek。 你不应该使用inheritance,因为你不想在栈中使用push_back,push_front,removeAt等types的function。
他们没有任何关系。 授权是一种行为。 inheritance是一种模型技术。
inheritance是为“is-a”build模的。 电脑“是一个”电子系统。
授权是如何提供结果的方法。 有时候一个对象会把工作委托给另一个对象。 委托可以通过任何关系 – 您可以委托给超类,复合或聚合的成员或任何关系。
您可以使用委派给多个内部类实例来将其function简化为一个通用的分组。 如果你的语言没有实现多重inheritance,例如你可以从一个基础inheritance,并包装另一个基础,把你想要公开的function委托给底层的实现。 inheritance也将你的类连接到你inheritance的类的层次结构中,就像在委托中一样,你可以保留自己的位置并将调用委托给另一个。
假设你的类被称为B,派生/委托给类然后被称为A.
以下是一些使用inheritance或委托的例子:
如果
- 你想expression关系(is-a),那么你想使用inheritance。
- 你想能够传递你的类到一个现有的API期待A的,那么你需要使用inheritance。
- 你想增强A,但A是最终的,不能再分类,那么你需要使用组合和委派。
在我看来,可以调用代理时,使用和inheritance是永远embedded的。
以in_threads gem为例,它使用InThreads委托来实现任何Ruby Enumerable模块的线程。 有了这个,只需要调用一个数组的in_threads方法,它将以线程运行。