私はJavaで動作しますデコレーターパターン - 一度に2種類を飾る方法
私はグラフエッジのデコレータの素敵な構造を作成しました。私は2つの頂点を持つベースエッジを持っている、私はエッジに重みを追加する加重デコレータを持っているし、私はエッジに方向を追加する方向付けされたデコレータを持っています。デコレータは、継承ではなく、インタフェースとデリゲートメソッドを使用して実装されます。
ここで、フローエッジに対応する別のデコレータ、つまりフローデコレータを追加したいと思います。フローエッジは、方向と重量(容量)とフローの両方を持ちます。このようなJavaの実装方法を教えてください。
public class FlowEdge implements IEdge, IWeightedEdge, IOrientedEdge, IFlowEdge
{
private IEdge, IWeightedEdge, IOrientedEdge decorated;
private int flow;
//constructors, delegate methods...
などが必要ですが、それは明らかに不可能です。
おそらく、デコレータは使用するのに最適なパターンではありません。私は懸念の分離を達成したいと思います(私は正常な、重み付けされた、指向エッジの任意の組み合わせを持つことができます)が、1つのクラスの多分複数のデコレータの機能が必要です。これは何とか可能ですか?それとも私はこれを工学的に工夫していますか?
なぜ「これは明らかに不可能ですか? 1つのクラスだけを 'extend 'することはできますが、任意の数のインタフェースを' implement'することができます。 –
私は行を意味しました プライベートIEdge、IWeightedEdge、IOrientedEdge装飾; すべての型を保持するために、デリゲートメソッドを実装する必要があります。 –
@JakubZaverkaはい、そうです。 –