2009-04-06 9 views
2

Effective Java私はこのような構成のための正しい定義について疑問に思って静的ファクトリメソッドや作成方法

class A { 
public static A create() { 
    return new A(); 
} 

private A() { 
} 
} 

(項目1)とwikipedia articleに私は、これはstaticファクトリメソッド(いくつかの種類のと呼ばれていることがわかりました工場法)。

しかし、Refactoring to Patterns(第6章)の読み込み中、私はという同じ構造を作りました。作成方法。また、ファクトリメソッドパターンではじまるべきではないことに注意してください。

真実はどこですか? ファクトリメソッド -

答えて

1

一つのアプローチは、パラメータなしのメソッドを(列挙によって例えば)とパラメータ化作成メソッドを呼び出すことです。工場ではより強力で、さまざまな種類のオブジェクトを作成できます。

パラメータのないメソッドを使用する場合は、どのクラスのメソッドを呼び出すかを決める必要があります。パラメータ化されたメソッドでは、このロジックをメソッド自体に渡します。したがって、後者(ファクトリ)は、作成するクラスオブジェクトを単独で決定します。

+0

申し訳ありませんが、あなたの投稿の作成メソッドとファクトリメソッドの実際の違いはありませんでした。もう一度説明していただけますか? –

+1

作成メソッドを呼び出すには、B :: Create()またはC :: Create()を呼び出すクラスのメソッドを決定する必要があります。ファクトリメソッドでは、クラスF :: Create(パラメータ)を使用します。パラメータは、たとえば列挙型の値で、fcatoryは作成するクラスオブジェクトを決定します。 – sharptooth

0

よく、用語は著者によって異なることが多いので、あまり心配しないでください。

しかし、 "Refactoring to Patterns"はfactory method patternがあるので、これを "ファクトリメソッド"と呼ぶことを警告します。ファクトリメソッドパターンは単なるファクトリメソッドではないので、混乱を避けるために別の名前を指定します。

「シンプルな静的ファクトリ」とも言えるかもしれませんが、それはちょっとした言葉遣いです。

1

作成方法は、クラスのインスタンスを作成する静的または非静的メソッドです。 ファクトリメソッドは、クラス階層で定義され実装されたメソッドであり、作成は多態性を持ちます。

関連する問題