使用真实类作为超类而不是简单工厂模式中的抽象类会产生什么负面影响?

时间:2012-07-12 02:11:50

标签: c# design-patterns

我使用这样的简单工厂模式:

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(我感觉不好但找不到更好的),将来会发生什么不好的事情? 有没有更好的办法?

1 个答案:

答案 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");
        }
    }
}

此实现优先于创建深入的层次结构。