我想为myInterface
做一个工厂类,但是我无法为具体类调用构造函数,因为工厂类必须使用特定的参数T
。
有没有办法为通用接口创建工厂类?
简化示例
interface myInterface<T>
{
void work(T input);
T getSomething();
}
class A : myInterface<int>
{
//implementation
}
class B : myInterface<someClass>
{
//implementation
}
interface Factory<R,T>
{
R Create(T type);
}
class myFactory<T> : Factory<myInterface<T>, string>
{
myInterface<T> Create(string type) {
if(type == "A")
//return new A object
if(type == "B")
//return new B object
//some default behavior
}
}
答案 0 :(得分:0)
默认情况下,工厂模式是通用的,因为此类模式的整个目的是返回不同类型的对象,具体取决于您为方法提供的值。
除了初始化所需类型的对象之外,工厂内不应该有很多代码。
在您提供的代码中,您希望返回 myInterface 类型的对象,但由于您必须指定不同的返回值,因此不太可能将通过类型参数的值选择的类型。您已经失去了工厂模式的全部要点,因为您已经声明了特定类型的工厂 - 这意味着您将只创建该类型的对象(概念丢失)。
我要做的是创建另一个类,它将作为A和B类的一个层(两个类都必须从它继承)。然后我会将工厂的返回类型声明为该类的类型。
请记住,每个类都实现相同的通用接口,但类型不同。
这是一个简短的例子:
interface myInterface<T>
{
}
class LayerClass
{
}
class A : LayerClass, myInterface<int>
{
//implementation
}
class B : LayerClass, myInterface<object>
{
//implementation
}
public static void Main(string[] args)
{
}
class myFactory<T>
{
LayerClass Create(string type)
{
if(type == "A")
return (LayerClass)new A();
if(type == "B")
return (LayerClass)new B();
return null;
}
}