请看以下问题:Favour composition over inheritance
接受的回答者说:“它扩展了 Hashtable,以便重用其方法并避免使用委托重新实现其中一些方法”。我不确定回答者的意思是:使用委托重新实现其中一些。回答者是什么意思?
我熟悉 Delegates 和 Observer 设计模式。
请看以下问题:Favour composition over inheritance
接受的回答者说:“它扩展了 Hashtable,以便重用其方法并避免使用委托重新实现其中一些方法”。我不确定回答者的意思是:使用委托重新实现其中一些。回答者是什么意思?
我熟悉 Delegates 和 Observer 设计模式。
使用组合时,如果要支持底层类具有的方法,则必须定义自己的实现,该实现只是在底层类上委托(或使用)相同的方法。在这种情况下使用继承来避免编写那种简单的(委托)方法可能很诱人,但实际上应该只在存在 IS-A 关系时才使用继承。
例如,
public class Foo
{
public virtual void Bar()
{
// do something
}
}
public class InheritedFromFoo : Foo
{
// we get Bar() for free!!!
}
public class ComposedWithFoo
{
private Foo _foo;
public void Bar()
{
_foo.Bar(); // delegated to the Foo instance
}
}