Composition over inheritance 2
请看下面的问题:赞成组合而不是继承
接受的回答者说:"它扩展了hashtable,以便重用其方法,并避免使用委托重新实现其中的一些方法。"我不确定回答者的意思是:使用委托重新实现其中的一些。回答者是什么意思?
我熟悉代表和观察员设计模式。
使用组合时,如果希望支持基础类所具有的方法,则必须定义自己的实现,该实现只在基础类上委托(或使用)相同的方法。在这种情况下,使用继承可以避免编写简单(委托)方法,但实际上只有在存在IS-A关系时才应该使用继承。
例如,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 } } |