ファクトリメソッドはクラスデザインパターンです。抽象ファクトリは多くのファクトリメソッドを使用します。なぜAbstractFactoryはクラスデザインパターンではなくオブジェクトデザインパターンなのですか?Abstract Factoryは、インスタンス化をどのオブジェクトに延期しますか?
1 に答える
抽象ファクトリパターンは、製品オブジェクトの作成をConcreteFactoryサブクラスに延期します。クライアントは、メソッドパラメータとしてファクトリクラス(ConcreteFactoryサブクラスの親)を期待しているため、渡されたConcreteFactoryのインスタンスに基づいて、対応する製品インスタンスが作成されます。したがって、Abstract Factoryは、実行時に渡されるConcreteFactoryインスタンスでファクトリメソッドを呼び出すことによって製品インスタンスを作成します。したがって、これはオブジェクトデザインパターンです。通常、これらのコンクリート工場はシングルトンです。
ただし、ファクトリメソッドはクラスレベルで発生します。ConcreteProductをインスタンス化するには、新しいConcreteFactoryクラスを作成する必要があります。このConcreteFactoryは、Productを返すcreate()メソッドを持つFactoryクラスを拡張します。ConcreteFactoryは、Factory親クラスで定義されたcreate()メソッドをオーバーライドします。
コメントに答える:
はいファクトリメソッドはパラメータ化されていますが、AbstractFactoryでは、渡されたConcreteFactoryのメソッドを呼び出すことができるため、実行時に別のConcreteFactoryに切り替えることができます。ただし、ファクトリでは、create()がクラスの一部であるため、具象製品を作成する場合は、親ファクトリクラスを拡張するConcreteFactoryを作成する必要があります。