これは、あなたが知っているかもしれないソフトウェア設計パターンに似ていますか?
私はインターフェースを持っています:
public interface IA {
}
およびシールされたその子クラス:
sealed public class A: IA {
}
タイプの代わりにタイプB
のオブジェクトを使用したい別のテンプレート クラスができました。A
T
template<class T>
public class B {
T a;
IA pa;
B() {
}
}
ただし、のコンストラクターでA
は、テンプレートを次のように指定することはできません。B<A>
また、エラー状態でA
あるsealをA
テンプレートで使用することはできません。
この問題を解決するために、別のクラスを作成します。
public class C {
A a;
A GetA() {
return a;
}
}
次に、テンプレート クラスを書き換えB
ます。
template<class T>
public class B {
C c;
IA pa;
B() {
// initialize c=new C();
// initialize pa=c.GetA();
}
}
私のクラス階層にはいくつかの欠陥があると思います。テンプレート化またはジェネリックにしたいのですが、のようなクラスの導入は、C
私が取り組んでいるものを維持していないようです。
インターフェイスも実装するクラスがさらにある場合はどうX
なりY
ますか?Z
IA
編集
私のプログラムは正常に動作するようになりました。上記のパターンを適用したかどうかはわかりません。そして、別のクラスができたらX
:
public class X: IA {
}
これX
を のパラメーターとして使用するには、 X の代表クラスの新しいB<X>
定義を次のように追加する必要があります。
public class RX {
X x;
RX() {
x=new X();
}
X GetX() {
return x;
}
}
したがって、クラス B も次のように書き直す必要があります。
template<class T>
public class B {
C c;
RX x;
IA pa;
B() {
// initialize c=new C();
// initialize pa=c.GetA();;
// if parameter X is used
// pa=x.GetX();
}
}
ほら、きれいに見えません。