2010-12-01 12 views
3

2つの基本クラスAとBを似ていますが、類似していますが区別することをお勧めします。それぞれには、それぞれのクラスに同じ機能とメンバーを追加するサブクラス(A 'とB')があります。私がA 'とB'にコードを複製する必要がないようにするためのデザインパターンはありますか?C#同一の実装で異なる基本クラスを持つ2つのクラスのデザインパターン

私はBridgeDecoratorを見ましたが、どのように動作するのか分かりません。

おかげで、 ロブ

+1

ない「コード生成は、」デザインパターンとしてカウント? – Gabe

+1

@Gabe、もちろんではありません。 –

答えて

11

あなたは、組成物を使用して、別のクラスCに共有コードをリファクタリングてもらえますか?

0

add the same functionality and members to their respective classes。インターフェイスに近いところに聞こえますが、それでもまだ別の実装があります。たぶんProviderパターンに類似したものでしょうか? http://msdn.microsoft.com/en-us/library/ms972319.aspx

+0

私は他の理由でインタフェースを使用することになるかもしれませんが、あなたが言うように、コードの重複を減らすことはありません。 –

2

が類似しているが、 別個であることが好ましいている2つの基底クラスA及びBを取ります。それぞれにサブクラス(A 'と B')があり、同じ機能を とそれぞれの クラスに追加しています。

これは少し奇妙な場所です。それが私だったら、私はこのデザインの部分を変えようとしています。

何らかの理由でそれが妥当でないとすれば、デコレーターはコードの重複を避けるためにできる最善の方法だと思います。

サブクラスA'& Bを作成する必要があります。そして、それぞれに追加されたメソッドとプロパティを宣言する必要があります。これらのメンバーは、共通の機能を実装できる別のクラスのメンバーに委任する必要があります。そのクラスのインスタンスは、A '& B'の両方に含まれます。

これらの共通メンバーの実装が重要な場合は、これによって実際には重複が削減されます。

2

戦略パターン。 3番目のクラスに共通コードを作成し、A 'とB'にインスタンスを保持します。

0

mixinsのコンセプトは、あなたが望むものに近くなります。ただし、この概念はC#でネイティブにサポートされていません。ミックスインのコンセプトを模倣するためにインターフェイスや拡張メソッドを使用することはできますが、それほど美しくはありません。

は、詳細については、この疑問の表情を持っている:Is it possible to implement mixins in C#?

関連する問題