关于vb.net:Composition over inheritance 2

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
      }
 }