2016-08-22 7 views
-2

ファクトリメソッドのパターンに関する次のクエリを理解するのに役立つ人はいますか?工場と工場の方法のパターンをC#

imはthisリンクをサンプルとして参照しています。

1.ファクトリメソッドパターンの抽象クラスファクトリの必要性は何ですか? 通常のクラスを使用する場合はどうなりますか?

2.コードの変更はクライアントに影響を与えないことが記載されています。しかし、 新しいクラスproduct3が追加された場合は、適切な の変更がクライアントコードでも必要になります(以下のコードに従って)。次に、このデザインパターンの利点は何ですか?

3.Whatは、我々はシンプルなデザインパターンでオープンクローズの原則を実装カント?objFactories[0] = new concreteFactoryforProduct1();

Factory[] objFactories = new Factory[2]; 
    objFactories[0] = new concreteFactoryforProduct1(); 
    objFactories[1] = new concreteFactoryforProduct2(); 
    foreach (Factory objFactory in objFactories) 

    { 
      Product objProduct = objFactory.GetProduct(); 
      objProduct.GetDetails(); 
     } 

concreteFactoryforProduct1 factory = new concreteFactoryforProduct1();オーバー

4.Whyの利点ですか

答えて

1

(1)抽象クラスの最も単純な使い方として、abstractを追加すると、新しいFactory()を使用してインスタンスを作成することを避けることができます。 (意味がないので、動物と象と同じ - >動物は抽象だけであり、動物と呼ばれる存在は存在しません)

(2)単なるデモです。利用可能な工場をリストアップするために、地球上でのユースケースはありません。

(3)この例では、Factoryアレイですが、あなたの質問は適用されません。

(4)ファクトリメソッドパターンを使用せずに状況を尋ねていると思います。多くの状況があります。あなたはそれを実装しようとしているかどうかを特定することができます。

+1

)インスタンスを作成していますが、objFactories [0] = new concreteFactoryforProduct1(); 2)あなたが説明しようとするものを明確にしていない。 3)なぜobjFactories [0]を使用する必要がありますか?なぜ私はクラスインスタンスを使用できませんか?利点は何ですか? –

+0

(1)はい、OKです。あなたは新しいFactory() - >コンストラクタを呼び出していません。ちょうどリファレンスタイプ。 (2)実際には、Factory1で作成されたオブジェクトが必要な場合は、インスタンス(好ましくはSingleton)を作成し、そのメソッドを呼び出すだけです。 (3)ここでは、両方のタイプのコンクリート工場を同じ配列に挿入する方法はありませんか? –

+1

私はあなたのことを理解しました。しかし、あなたはパターンの実装を説明していて、この方法を使う利点を尋ねています。この例では、配列を使用しています。ファクトリ抽象インスタンスに直接割り当てる多くの例を持つことができます。 –