2

私が見つけた Factory Method Pattern の例はすべて、Abstract Factory Pattern の例でもあります。

これを参照してください:

static void Main(string[] args) {
    IFactory factory = new ConcreteFactory();
    IProduct product = factory.CreateProduct(); // <== factory method pattern??
    ProcessProduct(product);

    Console.ReadKey();
}

このコード行は次のようになります。

IProduct product = factory.CreateProduct();

Factory Method Pattern? の「精神」を完全に反映しています。

ここで、ファクトリは、コードが特定のオブジェクトの型を認識せずに Product オブジェクトを作成しています。

その場合、著者は実際の例を構築する方法を必要としていたため、それらが重複するのも不思議ではありません。

私が働いている会社の定義の辞書を作成しています。

4

2 に答える 2

0

あなたが提供する例は技術的にはファクトリメソッドですが、あまり役に立ちません。設計パターンは、ターゲット アプリケーション/機能の開発を簡素化できる場合にのみ有益です。

一般に、ファクトリ メソッドの実装のメリットは次のとおりです。

  1. オブジェクトの作成ロジックの標準化
  2. オブジェクト構築のための意味的に意味のあるインターフェースを提供する

パラメーターを取らないインスタンス メソッドが、既定のコンストラクターよりも優れている可能性があるかどうかは不明です。

ウィキペディアの Factory Method 記事の C# の例を見てください。(コピーして下に貼り付けます)

public class Complex
{
    public double real;
    public double imaginary;

    public static Complex FromCartesianFactory(double real, double imaginary)
    {
        return new Complex(real, imaginary);
    }

    public static Complex FromPolarFactory(double modulus, double angle)
    {
        return new Complex(modulus * Math.Cos(angle), modulus * Math.Sin(angle));
    }

    private Complex(double real, double imaginary)
    {
        this.real = real;
        this.imaginary = imaginary;
    }
}

Complex product = Complex.FromPolarFactory(1, Math.PI);

それぞれが明確に定義されたパラメーターと、明確に定義されたオブジェクトの有効なインスタンスを構築するためにそれらのパラメーターを使用する方法の明確に定義された解釈を持つ 2 つのファクトリ メソッドを指定するため、これは便利です。さらに、コンストラクタはprivateであり、ファクトリ メソッドは ですstatic。これにより、そのオブジェクトのインスタンスを構築する唯一の手段はファクトリ メソッドを使用することになります。この例には特に適用されませんが (考えられるすべてのdoubleパラメーター値が有効であるため)、ファクトリ メソッドまたはコンストラクターにも検証ロジックを配置することは理にかなっています。

一般に、ファクトリ メソッドの目的は、オブジェクトの構築をカプセル化することでコードの複雑さを軽減することであり、提供した例がその目的をどのように達成するかは不明です。

于 2013-04-29T15:34:49.620 に答える