我使用这样的简单工厂模式:
public class Father
{
public virtual int field1;
public virtual int Dosth()
{
}
}
public class Son:Father
{
//inherit field1 from Father
public override int Dosth();//override Father's method
public string ex_field;
public string string Ex_method()
{
}
}
public class Factory
{
public static Father CreateObj(string condition)
{
switch(condition)
{
case("F"):
return new Father();
case("S"):
return new Son();
default:
throw new exception("you have no choice");
}
}
}
在代码中,我使用真正的类而不是抽象类作为工厂类。 因为Son类只有在父类基础上扩展的东西(大多数上下文可以使用父亲的)。如果父和子继承了每个类的抽象类.Class的子不能继承父的字段和方法。 所以我的问题是:如果写为fllow(我感觉不好但找不到更好的),将来会发生什么不好的事情? 有没有更好的办法?
答案 0 :(得分:1)
如果您的类没有那么多共同点,那么使用一个接口并让工厂创建具有特定接口而不是特定类的对象
使用公共字段/方法创建一个接口,并让父和子实现它:
public interface IFamily
{
int field1;
int Dosth();
}
public class Father : AbstractA, IFamily
{
// Implementation goes here
int field1;
int Dosth() {
// Do magic
}
}
public class Son : AbstractB, IFamily
{
// Implementation goes here
int field1;
int Dosth() {
// Do magic
}
}
您的工厂将成为:
public class Factory
{
public static IFamily CreateObj(string condition)
{
switch(condition)
{
case("F"):
return new Father();
case("S"):
return new Son();
default:
throw new exception("you have no choice");
}
}
}
此实现优先于创建深入的层次结构。