【问题标题】:Composition over inheritance 2组合优于继承 2
【发布时间】:2013-01-03 20:17:35
【问题描述】:

请看以下问题:Favor composition over inheritance

接受的回答者说:“它扩展了 Hashtable,以便重用其方法并避免使用委托重新实现其中一些方法”。我不确定回答者的意思是:使用委托重新实现其中一些。回答者是什么意思?

我熟悉 Delegates 和 Observer 设计模式。

【问题讨论】:

  • 您可以对答案发表评论并要求他澄清
  • @simchona,这个问题是六个月前提出的,所以我认为最好开始一个新线程。我会检查常见问题解答。

标签: vb.net design-patterns


【解决方案1】:

当使用组合时,如果你想支持底层类拥有的方法,你必须定义你自己的实现,简单地委托(或使用)底层类的相同方法。在这种情况下使用继承来避免编写那种简单(委托)的方法可能很诱人,但实际上应该只在存在 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
      }
 }

【讨论】:

  • 谢谢。我理解继承。问题是关于组成的。您是否可以通过使用代表的组合示例修改示例或将我指向网页?
  • @w0051977 不,问题不在于委托,而在于如何通过继承或组合重用行为。根据定义,组合使用委托 - 类的行为重用底层类来提供自己的行为,即,它通过组合将部分行为委托给它正在使用的类。
  • 感谢您澄清 +1。我现在明白“委托”与代表无关。有没有显示这个委托的例子?
  • @w0051977 - 示例中的 ComposedWithFoo 类显示 Bar() 方法被委托给底层 Foo 实例的 Bar() 方法。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 2016-10-02
  • 2012-11-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多