私はdesing質問があります。私は基底クラスと多くの派生クラスを持っていると言うことができます。派生クラスのコンストラクタの後に何かを実行する
class MyBase
{
MyBase()
{
Record();
}
void Record()
{
/// this line is able to handle every object
Recorder.Process(this);
}
}
class DerivedA : MyBase
{
public int SpecialPropertyOfA { get; set; }
DerivedA(int specialPropertyOfA)
{
SpecialPropertyOfA = specialPropertyOfA;
}
}
class DerivedB : MyBase
{
public string SpecialPropertyOfB { get; set; }
DerivedA(string specialPropertyOfB)
{
SpecialPropertyOfB = specialPropertyOfB;
}
}
私が推測するように、すべてのプロパティを設定して派生クラスを記録したいと思います。しかし、上記の例では、Record
メソッドが呼び出されたときに設定されていないため、派生クラスの特殊なプロパティを記録することはできません。
これを克服する1つの方法は、Record
メソッドprotected
を作成し、これを派生クラスのコンストラクタの最終行と呼びます。しかし、これは私の基本原則に違反しています(派生クラスはすべて、初期化直後に記録する必要があります)。私は設計でこの義歯を作りたい。
これを処理する方法はありますか?
不可:
これを克服する方法
は、ファクトリメソッドを使用しています。これを行うための唯一の方法は、たとえばFactory経由で行うことです。私の場合は、レコード機能が不足しています。クラスがそれ以上のことをするように見えます。 – RvdKRecordをinterface/abstractとして作成し、それをすべてのDeriveクラスに実装するとどうなりますか? (あなたは記録の中で特別な小道具をどのように使いたいのですか?) –