小さなシステムでは、ファクトリメソッドを使用して関連オブジェクト(親クラスから継承)を作成し、オブジェクトのタイプを指定せずに動的にオブジェクトを作成できるようにします。サブクラスを持たず、そのオブジェクトがユーザークラスのインスタンスである別のオブジェクトを作成する必要があります。ファクトリメソッドパターンを正しく理解するために、最後のクラスのファクトリメソッドを作成する必要はありませんか?
2 に答える
Factory パターンは型の柔軟性だけではありません。たとえば、Java にはInteger.valueOf(int)
既にnew Integer(int)
. ファクトリ バリアントではキャッシュが可能です。各呼び出しは同じインスタンスInteger.valueOf(1)
を返します。これは、すべての不変オブジェクトで機能します。
もう 1 つの非常に重要な考慮事項は、オブジェクトの初期化です。オブジェクトの構築中に実行するのは安全ではない初期化パターンがいくつかあります。たとえば、オーバーライド可能なメソッドを呼び出します。これらのケースも Factory パターンによってエレガントに解決されます。
私は個人的に 3 番目の利点を主張しますが、これは一部の人にとっては物議を醸す可能性がありますnew
。たとえば、new OidableBinding(vb)
I like to writeの代わりにoidableBinding(vb)
. これは、静的インポートによって可能になります。補足:ファクトリ メソッドなどに名前を付けないでくださいgetInstance
。型名に似た名前を付けて、静的にインポートされたときにメソッドが見栄えがするようにします (また、他の当たり障りのない名前のファクトリ メソッドとの名前の衝突を作成しません)。
既存の Factory が関連オブジェクトを提供している場合は、別の Factory を作成することをお勧めします。ファクトリが 1 種類のオブジェクトしか作成しない場合でも問題ないと思います。