作成モード-工場メソッドモード
(I.概要
ファクトリー・メソッド・パターンは、オブジェクトを作成するためのインターフェースを定義し、サブクラスがインスタンス化するクラスを決定できるようにします。ファクトリーメソッドは、クラスのインスタンス化がそのサブクラスに遅延されることです。
ファクトリメソッドパターンでは、コアファクトリクラスはすべての製品の作成を担当しなくなりましたが、特定の作成作業をサブクラスに委任します。このコアクラスは抽象ファクトリロールに変換されました。これは、具体化されるファクトリサブクラスが実装する必要のあるインターフェースを提供することのみを担当し、インスタンス化する製品クラスの詳細には触れません。
(2)モード構成
ファクトリメソッドパターンには、主に次の役割があります。
- 抽象ファクトリ(作成者)の役割:この役割は、アプリケーションとは何の関係もないファクトリメソッドパターンの中核です。パターンでオブジェクトを作成するファクトリクラスは、このインターフェイスを実装する必要があります。上記のシステムでは、この役割はJavaインターフェースの作成者によって実行されますが、実際のシステムでは、この役割は多くの場合、抽象Javaクラスを使用して実装されます。
- 具象ファクトリ(Concrete Creator)ロール:このロールは、抽象ファクトリインターフェースを実装する具象Javaクラスです。特定のファクトリロールには、アプリケーションに密接に関連するロジックが含まれており、製品オブジェクトを作成するためにアプリケーションによって呼び出されます。
- 抽象製品(製品)ロール:ファクトリメソッドパターンによって作成されたオブジェクトのスーパータイプ、つまり、製品オブジェクトの共通の親または共通のインターフェース。このシステムでは、この役割はJavaインターフェース製品によって実行されます;実際のシステムでは、この役割は多くの場合、抽象Javaクラスを使用して実装されます。
- 具体的な製品(コンクリート製品)ロール:このロールは、抽象製品ロールによって宣言されたインターフェースを実装します。ファクトリメソッドパターンによって作成された各オブジェクトは、特定の製品ロールのインスタンスです。
(3)使用手順
ファクトリーメソッドのパターンは非常に使いやすく、主に次の5つのステップに分かれています。
ステップ1:抽象ファクトリクラスを作成し、具象ファクトリのパブリックインターフェースを定義する;
ステップ2:抽象製品クラスを作成し、具象製品のパブリックインターフェースを定義する;
ステップ3:具象製品クラス(抽象製品クラスを継承する)を作成し、生成される特定の製品を定義する;
ステップ4:具象ファクトリクラスを作成し(抽象ファクトリクラスを継承)、対応する具象製品インスタンスを作成するためのメソッドを定義します。
ステップ5:具象ファクトリクラスのメソッドを呼び出して、外部の世界でさまざまな具象製品クラスのインスタンスを作成します。
ファクトリメソッドパターンを体験する具体的な例を見てみましょう。
ステップ1:抽象ファクトリクラスを作成し、具象ファクトリのパブリックインターフェースを定義する
abstract class Factory{
public abstract Product Manufacture();
}
ステップ2:抽象製品クラスを作成し、特定の製品のパブリックインターフェイスを定義する
abstract class Product{
public abstract void Show();
}
ステップ3:具体的な製品クラスを作成し(抽象製品クラスを継承)、生成する具体的な製品を定義します
class ProductA extends Product{
@Override
public void Show() {
System.out.println("生产产品A");
}
}
class ProductB extends Product{
@Override
public void Show() {
System.out.println("生产产品B");
}
}
ステップ4:具象ファクトリクラスを作成し(抽象ファクトリクラスを継承)、対応する具象製品インスタンスを作成するメソッドを定義します
class FactoryA extends Factory{
@Override
public Product Manufacture() {
return new ProductA();
}
}
class FactoryB extends Factory{
@Override
public Product Manufacture() {
return new ProductB();
}
}
ステップ5:外界は、特定のファクトリクラスのメソッドを呼び出すことにより、異なる特定の製品クラスのインスタンスを作成します
//生产工作流程
public class FactoryPattern {
public static void main(String[] args){
FactoryA mFactoryA = new FactoryA();
mFactoryA.Manufacture().Show();
FactoryB mFactoryB = new FactoryB();
mFactoryB.Manufacture().Show();
}
}
(4)特徴
抽象ファクトリパターンの双子の兄弟として、ファクトリメソッドパターンはオブジェクトを作成するためのインターフェースを定義しますが、サブクラスはインスタンス化するクラスを決定します。つまり、ファクトリメソッドパターンはサブクラスへのインスタンス化を遅らせます。
工場メソッドモデルは「開閉の原則」と非常に一貫しており、新しい製品を追加する必要がある場合、元のシステムを変更することなく、特定の製品カテゴリとそれに対応する特定の工場を追加するだけで済みます。同時に、ファクトリメソッドモデルでは、ユーザーは製品が製造されている特定の工場を知るだけでよく、製品の作成プロセスに関連している必要はなく、特定の製品カテゴリ名さえ知る必要もありません。しかし、彼は「開閉の原則」と一致していますが、新製品ごとに2つのカテゴリーを追加する必要があるため、必然的にシステムの複雑さが増し、これも彼の最大の欠点の1つです。
2020年7月10日