私は以下で説明しようとする設計上の問題に挑戦されました。コンストラクタのデザインパターン
クラスAは、複数のパラメータを持つコンストラクタを持っているとします。各インスタンス化でこれらのパラメータをすべて書き込むのは疲れて汚いので、別のクラスを作成してStyleSheetAという名前を付けて、これらのパラメータをすべてカプセル化し、Aのコンストラクタの唯一のパラメータにします。後で使用するStyleSheetAテンプレートを必要に応じて変更できます。
この時点で、私はAを拡張する必要があります.BがAを拡張するとします。Bには独自のスタイルシート、つまりStyleSheetBがあります。 StyleSheetBがStyleSheetAを継承するのが適切だと思います。そのため、BのコンストラクタもスーパークラスAを構築することができます。しかし、このデザインには欠陥がある可能性があります。たとえば、スタイルシートにゲッター/セッターを追加するとどうなりますか?これらの状況をすべて処理する斬新な方法はありますか?私は間違ったやり方でいますか?混乱している人のために、私はここにいくつかのコードを添付:
class A
{
StyleSheetA ss;
A(StyleSheetA ss)
{
this.ss = ss;
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetA
{
int n1;
int n2;
// :
// :
int n100;
}
class B extends A
{
B(StyleSheetB ss)
{
super(ss);
// Do some stuff with ingredients of styleSheet
}
}
class StyleSheetB extends StyleSheetA
{
int n101;
int n102;
// :
// :
int n200;
}
は、あなたの批評家のいずれかが理解されるであろうにも、任意のヘルプや提案をいただき、ありがとうございます。
編集:ジェネリックスのサポートがないように、私はJavaで開発しています。
どの言語を開発しているのかは明らかではありませんが、通常はジェネリックス/テンプレートがこの問題を解決するのに役立ちます。クラスAをAにすると、コンポジットのタイプ(StyleSheetBなど)をクラスBからA に拡張することができます。このような機能がない場合は、C#;)を試してください。 –
ええ、あなたのソリューションは本当に良いアプローチですが、残念ながら私はJavaで開発していましたが、そこには一般的なサポートはありません。ありがとう。 –
java-meタグを追加する必要があります。 ;) – weltraumpirat