这类似于您可能知道的某些软件设计模式吗?
我有一个界面:
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
密封,{{1无法在模板中使用。
为了解决这个问题,我创建了另一个类:
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>
所以我还必须将B类重写为:
public class RX {
X x;
RX() {
x=new X();
}
X GetX() {
return x;
}
}
你看,它看起来并不整洁。