这是否类似于您可能知道的某些软件设计模式?
我有一个界面:
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
是密封的,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
andZ
等也实现了IA
接口怎么办?
编辑
我的程序现在工作正常,我只是不知道我是否应用了上述任何模式。而且一旦我有另一堂课X
:
public class X: IA {
}
并且为了将其X
用作 的参数B<X>
,我必须添加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();
}
}
你看,它看起来并不整洁。