1

Factory パターンについて読んでいて、その概念と実装を理解しています。しかし、その定義は私を混乱させます。誰かがそれを明確にしてもらえますか?

定義:ファクトリ パターンは、オブジェクトを作成するためのインターフェイスを定義することですが、オブジェクトの作成をサブクラスに委譲します。

オブジェクトの作成をサブクラスに委任することに混乱しました。サブクラスではなく、ファクトリクラスに責任を委任していますか?

4

3 に答える 3

1

まだコメントを投稿できません。そうでなければ、これはコメントになります。

これを読むことをお勧めします。これは PHP での正しいオブジェクト指向プログラミングですか? 、 徹底的に。彼は工場のパターンを構築するために彼の道を歩みます。コンテキストについては、スレッド全体を読んだほうがよい場合があります。それほど長くはなく、非常に啓発的です。

于 2013-06-07T18:09:01.853 に答える
1

読む:ファクトリ パターンは、オブジェクトを作成するためのインターフェイスを定義することですが、オブジェクトの作成をファクトリ クラスのサブクラスに委譲します。

注意: factory クラスのサブクラス

クラスから始めます: CheeseCakeFactory. 次のようなインスタンスがあります。

CheeseCakeFactory theFactory = new CheeseCakeFactory();       .......  (1)

次に、次のようにします。

Cake aCake = theFactory.createCake();                         .......  (2)

ここで、作成のタスクが工場に委任されたことに同意します。しかし、ここで最初の行をもう一度考えてみましょう:

CheeseCakeFactory theFactory = new SweetCakeFactory();        .......  (3)

SweetCakeFactoryファクトリの具体的な実装を変更するだけで継承すると仮定するCheeseCakeFactory と、最終的に作成される製品が変更されます。次に、2 行目でサブクラスにオブジェクトの作成を要求します。これが、インスタンス化の責任がサブクラスに委任されていると言う理由です。

于 2013-06-07T18:34:02.440 に答える
0

このように定義を分解してみてください。

Factory パターンは、オブジェクトを作成するためのインターフェースを定義することです (...)

まず、インターフェイスを定義します。たとえば、

interface IObjectFactory
{
    object CreateObject();
}

このインターフェースは基本的に、ファクトリが何をするか、どのタイプのオブジェクトを作成するかを定義します。ただし、これはまだインターフェイスであるため、使用するには、まずそれを実装する必要があります。

したがって、

(...) ただし、オブジェクトの作成はサブクラスに委任します。

ここで、問題はサブクラスの表現にあると思います。インターフェイスはクラスではなく、インターフェイスであるため、サブクラスを持つことはできませんさらに、インターフェイスは常に実装をクラスに委任する必要があるため、文全体が冗長に見えます。

ウィキペディアで Factory pattern の定義を見ると、似ているように見えますが、実際の意味を伝えていることがわかります。

このパターンの本質は、「オブジェクトを作成するためのインターフェイスを定義しますが、インターフェイスを実装するクラスにインスタンス化するクラスを決定させます。Factory メソッドにより、クラスはインスタンス化をサブクラスに任せることができます。

于 2013-06-07T18:53:39.437 に答える