これは、あなたが知っているかもしれないソフトウェア設計パターンに似ていますか?
私はインターフェースを持っています:
public interface IA {
}
およびシールされたその子クラス:
sealed public class A: IA {
}
タイプの代わりにタイプBのオブジェクトを使用したい別のテンプレート クラスができました。AT
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ますか?ZIA
編集
私のプログラムは正常に動作するようになりました。上記のパターンを適用したかどうかはわかりません。そして、別のクラスができたら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();
}
}
ほら、きれいに見えません。