委任
public class A {
private B b = new B();
public void methodA() {
b.methodB();
}
}
A
呼び出しのクライアントの場合methodA
、クラスは呼び出しを'sにA
委任します。B
methodB
理論的根拠。クラスAは、他の場所に属する動作を公開します。これは、クラスAが1つのクラスから継承する単一継承言語で発生する可能性がありますが、そのクライアントには別のクラスで実装される動作が必要です。さらなる研究。
ハイブリッド委任
public class A {
private B b = new B();
public void methodA() {
b.methodB( this );
}
}
単純な転送を伴う委任と、継承の代わりとして機能する委任の違いは、呼び出し先は、次のように例示される呼び出し元のパラメーターを受け入れる必要があることです。
b.methodB( this );
理論的根拠。クラスがクラスから継承した場合と同じように、クラスB
インスタンスがクラスから利用できる機能を使用できるようにしますが、継承は行いません。さらなる研究。A
B
A
構成
public class A {
private B b = new B();
public A() {
}
}
クラスの特定のインスタンスへの参照がなくなるとA
、そのクラスのインスタンスB
は破棄されます。
理論的根拠。クラスがモジュール方式で動作と属性を定義できるようにします。さらなる研究。
集約
public class A {
private B b;
public A( B b ) {
this.b = b;
}
}
public class C {
private B b = new B();
public C() {
A a = new A( this.b );
}
}
クラスの特定のインスタンスへの参照がなくなるとA
、そのクラスのインスタンスはB
破棄されません。この例では、A
との両方が破棄されるC
前にガベージコレクションされる必要があります。B
理論的根拠。インスタンスがオブジェクトを再利用できるようにします。さらなる研究。
参照なしのデモンストレーション
これらの単純なパターンに付けられた名前は、それらの参照関係によって定義されます。