デコレータ/アダプタのような機能を拡張したいクラスがありますが、拡張しているクラスが拡張しているクラスの種類について何か知る必要はありません私が拡張したいオブジェクトの種類ごとに新しいクラスを書く必要はありません。しかし、私が拡張したいと思うオブジェクトはすべて共通の基底クラス、Team
を共有しています。これが私の最初のアイデアだったので、ここでは、ジェネリック医薬品の使用のために熟し聞こえる:このデザインパターンはどのようなものでしょうか?いいですか? (C#)
public class TournamentTeam<T> : T
where T : Team
{
private int mSeed;
public TournamentTeam(T team, int seed)
: base(team)
{
/*
* error checking stuff here
*/
// set class variables
this.mSeed = seed;
}
public int Seed
{
get { return this.mSeed; }
}
}
私はTのメンバーにアクセスしたい場合は、今、新しいクラスは、それらのすべてを持っているように、これは、私が望んで行っているでしょう。基本コンストラクタは、拡張されたクラスがそれを心配する必要がないような方法で状態を設定します。デコレータ/ファサード型の方法で内部オブジェクトを指すために、どのメソッドをオーバーライドするかを知る必要もありません。言うまでもなく、これはコンパイルされませんでした。だから、少し違ったことを試しました。
public class TournamentTeam<T> : Team
where T : Team
{
#region class variables
private int mSeed;
private T mTeam;
#endregion
public TournamentTeam(int seed, T team)
: base(team)
{
/*
* error checking stuff here
*/
// set class variables
this.mSeed = seed;
this.mTeam = team;
}
public int Seed
{
get { return this.mSeed; }
}
public T Team
{
get { return this.mTeam; }
}
}
「基本クラス」の機能を使いたい場合は、チームプロパティを呼び出すだけでいいです。そして、それは一般的なので、私は機能に到達するためにボクシングを行う必要はありません。それは動作します、それはかなりですが、それは動作します。
これはどんなパターンですか、存在すればどんな落とし穴がこのアイデアで見ますか?これを達成するより良い方法はありますか?またimplimentationよう