工場メソッドパターンの定義
ファクトリーメソッドパターンの意味は、製品オブジェクトを作成するための工場インターフェイスを定義し、サブクラスに実際の作成作業を延期することです。コアファクトリークラスは製品作成の責任を負わないため、コアクラスは抽象的な工場の役割になり、特定の工場サブクラスによって実装されなければならないインターフェイスのみを担当します。さらなる抽象化の利点は、工場メソッドモデルにより、特定の工場の役割を変更せずにシステムが新製品を導入できるようにすることです。
次の役割が含まれています。
パターンのUMLクラス図
例
3つの詰め替え、つまり赤い補充、青い補充、黒い補充があるとします。ユーザーは、ボールペンを使用して、補充の色を明確にすることを望んでいます。
パターンの構造の説明と使用
1。要約製品:Pencore.java
パブリックアブストラクトクラスペンコア{文字列色;パブリックアブストラクトvoid writeword(string s);} 2。特定の製品(concreteproduct)_1:redpencore.java
Public Class RedPencoreはPencore {RedPencore(){color = "red"; } public void writeword(string s){system.out.println( "write the word"+color+":"+s); }}特定の製品(concreTeproduct)_2:bluepencore.java
Public Class BluepencoreはPencore {bluepencore(){color = "blue"; } public void writeword(string s){system.out.println( "write the word"+color+":"+s); }}特定の製品(concreTeproduct)_3:blackpencore.java
Public Class BlackPencoreはPencore {BlackPencore(){color = "black"; } public void writeword(string s){system.out.println( "write the word"+color+":"+s); }} 3。コンストラクター:Ballpen.java
パブリックアブストラクトクラスballpen {ballpen(){system.out.println( ""+getPencore()。color+"refill core")でボールペンを作成しました。 } public Abstract Pencore getPencore(); //工場メソッド} 4。ConcreTeCreator:
redballpen.javapublic class redballpenはballpenを拡張します{public pencore getPencore(){return new RedPencore(); }} blueballpen.javapublic class blueballpenはballpenを拡張します{public pencore getPencore(){return new bluepencore(); }} blackballpen.javapublic class blackballpen extends ballpen {public pencore getPencore(){return new BlackPencore(); }} 5。application.java
パブリッククラスアプリケーション{public static void main(string args []){pencore pencore; Ballpen Ballpen = new Blueballpen(); pencore = ballpen.getPencore(); pencore.writeword(「こんにちは、あなたを知ってうれしいです」); Ballpen = new Redballpen(); pencore = ballpen.getPencore(); pencore.writeword( "how are you"); Ballpen = new Blackballpen(); pencore = ballpen.getPencore(); pencore.writeword(「お会いできてうれしい」); }}要約します
ファクトリーメソッドパターンは、クラス作成パターンに属します。ファクトリーメソッドモードでは、工場の親クラスは、製品オブジェクトを作成するためのパブリックインターフェイスを定義する責任がありますが、ファクトリーサブクラスは特定の製品オブジェクトの生成を担当します。これの目的は、製品クラスのインスタンス化操作を工場のサブクラスに遅らせることです。つまり、ファクトリーサブクラスを介してどの特定の製品クラスをインスタンス化するかを判断することです。
ファクトリーメソッドモデルは、単純な工場モデルのさらなる抽象化とプロモーションです。オブジェクト指向の多型を使用しているため、ファクトリーメソッドパターンは単純な工場パターンの利点を維持し、その欠点を克服します。ファクトリーメソッドモデルでは、コアファクトリークラスはすべての製品の作成に責任を負いなくなりますが、サブクラスに特定の作成作業を提供します。このコアクラスは、特定の工場が実装しなければならないインターフェイスを提供する責任のみを担当しますが、製品クラスのインスタンス化の詳細は提供しません。これにより、ファクトリーメソッドモデルは、ファクトリーの役割を変更せずにシステムが新製品を導入できるようになります。工場メソッドモデルの主な利点は、新製品クラスを追加するときに既存のシステムを変更する必要がなく、製品オブジェクトの作成の詳細をカプセル化する必要がないことです。このシステムには、優れた柔軟性とスケーラビリティがあります。その欠点は、新しい製品を追加しながら新しい工場を追加する必要があり、システムクラスのペアをもたらし、システムの複雑さをある程度増加させることです。