実装しているCarrierクラスのクラス階層を設計する方法を解明しようとしています。Javaで多重継承を持たないクラス階層を設計する
私は現在抽象基本クラスキャリアを持っています。
私は別の抽象クラスTimedCarrier(TC)を持っています。これは、タイミングとドメインに関連する情報でキャリアを拡張します。具体的なクラスは、CarrierとTimedCarrierから拡張されています。
ユーザは進捗モニタが必要です。そのため、キャリアから拡張された抽象クラスMonitoredCarrier(MC)を作成します。具体的なクラスは監視対象キャリアから拡張されています。
これは、ユーザーの要件が変更されるまでしばらく時間がかかります。今私はMonitoredTimedCarrierが必要です。 TCとMCの両方をサブクラス化することはできません。 (つまり、このドメインの文脈で私に多くの意味を成しているので、私は彼らがタイムアウトしているか否かのキャリアを監視することができるはずです)
class TimedCarrier implements IMonitored
class Carrier implements IMonitored
、しかし:私はインターフェイスとしてMCを実装すると思っていますMCは豊富に実装されたクラスです。すべてのメソッドをMCから継承していたクラスにコピー・ペーストする必要があります。私は重複をコードしたくない。
どうすればこの問題を解決できますか?ありがとう。
[編集]
TimedCarrierメンバ変数とゲッター/セッターメソッドの束を有するキャリアを拡張します。 MonitoredCarrierは、メンバー変数、ゲッター/セッターメソッド、およびモニターと連携する一連のメソッドを使用してCarrierを拡張します。
class TimedCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
}
class MonitoredCarrier extends Carrier {
int var1..
int var2..
public void setVar1(int var1) {...}
public int getVar1() {...}
....
public void monitorSomething() {...}
public void monitorOtherSomething() {...}
}
私は同意する必要があります。多くの場合、コンポジションは継承よりも優先されます。 – gpampara