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

        }

    }

}

コードでは、ファクトリ クラスとして抽象クラスの代わりに実際のクラスを使用します。クラスSonはFather Classベースで何かを展開するだけなので(ほとんどのコンテキストはfather'sを使用できます).FatherとSonがそれぞれ抽象クラスを継承する場合.Class sonはFatherのフィールドとメソッドを継承できません. 私の質問は次のとおりです。フローとして書くと、将来、何か良くないことが起こりますか(気分が悪いが、より良いものを見つけることができません)?より良い方法はありますか?

4

1 に答える 1

1

クラスにあまり共通点がない場合は、インターフェイスを使用し、ファクトリに特定のクラスではなく特定のインターフェイスを持つオブジェクトを作成させます

共通のフィールド/メソッドを使用してインターフェイスを作成し、Father と Son の両方にそれを実装させます。

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 に答える