Java ファクトリ パターンには、単純ファクトリ パターン、ファクトリ メソッド パターン、抽象ファクトリ パターンの 3 種類があります。
シンプル ファクトリ パターンは、静的ファクトリ メソッド パターンとも呼ばれる革新的なクラス パターンです。通常、作成されたインスタンスには共通の親クラスがあります。
単純なファクトリ パターンは、「全能クラス」を使用して、外部から渡された情報に基づいてオブジェクトのどの特定のクラスを作成するかを決定します。下の図に示すように、
は、単純なファクトリクラスを使用して、名前に基づいて対応する製品オブジェクトを作成します。
単純なファクトリーパターンは「開閉原則」に大きく違反しており、拡張が難しいため、ファクトリーメソッドパターンが生まれました。
ファクトリーメソッドパターン(FACTORY METHOD)は、単純なファクトリーパターンを抽象化し、「開閉原理」に準拠し、スケーラビリティを実現します。
ファクトリ メソッド パターンの意味は、製品オブジェクトを作成するファクトリ インターフェイスを定義し、実際の作成作業をサブクラスに延期することです。このようにして、コア ファクトリ クラスはプロダクトの作成を担当しなくなり、特定のファクトリ サブクラスが実装する必要があるインターフェイスのみを担当する抽象ファクトリ ロールになり、ファクトリ メソッド パターンをさらに抽象化することの利点が得られます。新しい製品を導入することで、特定の工場の役割を変更せずにシステムを運用できるようになります。
ファクトリーメソッドパターンの使用シナリオ:
たとえば、携帯電話を組み立てる鋳造工場。携帯電話の原材料工場から筐体、表示画面、マザーボード、ボタン、バッテリーなどの付属品を入手して組み立てます。携帯電話組立工場は携帯電話の組立のみを担当し、付属品の生産は行いません。携帯電話の原材料工場から出てくる付属品が変わっても、各機器を接続するインターフェースさえあれば問題ありません。携帯電話の設定は変更されません。例えば、携帯電話を組み立てるファウンドリは、原材料工場の表示画面がTFTからUFBディスプレイに変更されたとしても、インターフェースが変わらなければそのまま組み立てを続けるだけで済みます。
以下の図に示すように、まず原料ファクトリーインターフェースを作成します。原料ファクトリーインターフェースは、筐体、ディスプレイ画面、マザーボード、バッテリーをそれぞれ作成するためのメソッドを定義します。
LB 携帯電話原材料工場は、バッテリー、TFT ディスプレイ、マザーボード、革ケースなど、LB 携帯電話に必要なアクセサリを提供する責任を負います。
以下は携帯電話組立工場のインターフェースです。組立工場は原材料工場から付属品を入手し、それを新しい携帯電話に組み立てることのみを担当します。それ以外のことは一切責任を負いません。
LB携帯電話組立工場は、LB原材料工場が提供する付属品の組立を担当します。もちろん、プライベートで他の携帯電話メーカーの携帯電話を組み立てる仕事を請け負うこともあります。
LB 携帯電話の販売は非常に人気があり、全国各地に組立工場があります。ある日、LB さんの携帯電話の画面が突然 TFT ディスプレイから UFT ディスプレイに変更されなければなりませんでした。一つの動作が全身に影響を与えるため、ファクトリーメソッドモデルの利点がこの時点で反映されます。 LB 携帯電話の構成がどのように変化しても、組立工場では、createDisplay() インターフェイスは変更されません。これには、原料工場の表示画面をTFT表示画面からUFT表示画面に切り替えるだけでよい。
ファクトリーパターンの利点は、製品の種類がどんなに変わっても、そのインターフェイスに基づいて作成された製品の機能が変わらない限り、作成した製品のインターフェースをユーザーに提供するだけで済むことです。何も変更する必要はありません。
ファクトリ メソッド パターンの多くの紹介では、ファクトリ パターンの使用法がリストされていますが、いつ使用するかについては具体的には紹介されていません。最初に読んだときは、ファクトリ メソッド パターンが冗長で複雑さを増していると感じました。その後、ファクトリ メソッド パターンの有用性を徐々に理解して、「ヘッド ファースト デザイン パターン」をもう一度読んで定着させました。理解を定着させるために、シーンをシミュレーションし、理論に基づいて記録しました。
Java ファクトリ パターンに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。