2012-05-05 10 views
0

私が委任パターンから把握しているのは、別のクラス(ClassB)が行うことを行うクラス(ClassA)です。 ClassAはClassBの機能よりも多くのことをしなければなりません。単にClassAサブクラスClassBを持つように誘惑されるかもしれません。それは間違ったことなので、この誘惑に抵抗してください。継承は本質的に遅いです。正しい設計では、ClassAにClassB型のデータメンバーを定義する必要があります。このように、あなたはサブクラス化の必要性を排除し、結合強度Javaの委任パターンについて

//ClassA 
public class ClassA{ 

     private ClassB classB; 

     //methods 
     public void doThis(){classB.doThis();} 
     public void doThat(){…} 
    } 

、ここが減少しているクラスB

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

です教えてください私の理解が正しいことです。

+1

ここで本当の質問は表示されませんが、これはおおよそ正しいと思います。 –

+0

継承よりも委任を選択する理由はたくさんありますが、そのパフォーマンスはその1つだとは言いません。 –

+0

@JBNizet、ありがとう、クラスをより凝集的にするために継承を選択しない理由は何ですか? – dghtr

答えて

1

実際にinheritance and compositionの違いは何ですか?これらのパターンはどちらも独自のユースケースを持っています。 Effective Javaは、2つのオブジェクトが真の「a」関係を持っている場合に継承を使用すべきであることを示唆しています。たとえば、長方形は形です。だからそれはおそらく形を拡張するはずです。しかし、人々がこの理論を誤解し、実際に別のオブジェクトを構成するべきであるときには、それでも拡張される場合があります。利点は、もちろん、将来的にはデカップリングとより良い設計です。教科書の例は、JavaでHashMapに拡張されています。拡張の代わりに、Mapを実装し、実際のロジックを行うように構成されたHashMapだけを実装することができます。

「効果的なJava」を読んで、両方のパターンの利点を理解することをお勧めします。