1

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

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");

        }

    }

}

在代码中,我使用一个真正的类而不是抽象类作为工厂类。因为子类只是在父类基础中有一些扩展(大多数上下文可以使用父类)。如果父类和子类各自继承一个抽象类。类子不能继承父类的字段和方法。所以我的问题是:如果写成流,将来会发生什么不好的事情(我感觉不好但找不到更好的)?有没有更好的办法?

4

1 回答 1

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

此实现优于创建深层继承层次结构。

于 2012-07-13T08:23:38.643 回答