关于java中的委托模式

关于java中的委托模式,java,Java,我从委托模式中了解到的是,类(ClassA)的作用与另一个类(ClassB)的作用相同。ClassA也必须比ClassB做更多的事情(有更多的方法)。您可能很想简单地使用ClassA子类ClassB。抵制这种诱惑,因为这样做是错误的。继承本质上是缓慢的,正确的设计包括在ClassA中定义ClassB类型的数据成员。这样,就消除了子类化的需要,并降低了耦合强度 //ClassA public class ClassA{ private ClassB classB;

我从委托模式中了解到的是,类(ClassA)的作用与另一个类(ClassB)的作用相同。ClassA也必须比ClassB做更多的事情(有更多的方法)。您可能很想简单地使用ClassA子类ClassB。抵制这种诱惑,因为这样做是错误的。继承本质上是缓慢的,正确的设计包括在ClassA中定义ClassB类型的数据成员。这样,就消除了子类化的需要,并降低了耦合强度

   //ClassA
 public class ClassA{

      private ClassB classB;

      //methods
      public void doThis(){classB.doThis();}
      public void doThat(){…}
  }
这是B班

    ClassB
  public class ClassB{
      public void doThis(){…}
  }

请告诉我,我的理解是正确的。

你真的在问这两者之间有什么区别。这两种模式都有自己的用例。建议在两个对象具有真正的“是”关系时使用继承。例如,一个矩形就是一个形状。所以它可能会延伸形状。然而,在某些情况下,人们误解了这个理论,并且在他们真正应该创作另一个对象的时候仍然延伸。其优点当然是解耦和将来更好的设计。教科书中的例子是用java扩展
HashMap
。我们可以实现
Map
而不是extends,只需要一个组合的
HashMap
来执行实际的逻辑


我建议您阅读有效的Java并了解这两种模式的优点

这听起来大致正确,但我看不到真正的问题。选择委派而不是继承有很多原因,但我不会说性能是其中之一。@JBNizet,谢谢,您能告诉我不选择继承使类更内聚的原因是什么吗。。!!我不明白你的问题。在您的问题中,您似乎主张不应该使用继承,因为它本身就很慢(这是有争议的),因此您应该选择委派。我的观点是,有时候继承是正确的解决方案,而委托往往是正确的解决方案。但是选择一个而不是另一个与一个比另一个快无关。