ファクトリーモードは、主に、ファクトリメソッドと抽象工場を、その主な目的は、クラス外から逸脱このアクティビティのインスタンスを結合方式を低減することである、特定のアプローチは、パッケージ・オブジェクトを作成することです。
ファクトリメソッド
パターンオブジェクトを作成するためにファクトリメソッドはインターフェースを規定しているが、クラスをインスタンス化するためにサブクラスによって決定されます。サブクラスに延期インスタンスを生成するクラスファクトリメソッドをしてみましょう。
一例として、ダイレクトモードを説明します。私たちは、PizzaStoreクラスはorderPizzaメソッドが含まれている必要があり、それはピザPizzaStoreクラスとクラスを達成するために必要、ピザ店をシミュレートしました。ピザメニューの特定の種類の必要性はorderPizzaプロセスでインスタンス化。直接的には、新しいを使用してインスタンス化した場合、我々はメニューを更新したいとき、あなたはorderPizzaコードに変更を加える必要があり、それが私たちに反することは明らかである「変更のため閉鎖」の原則。この目的のために、我々は宣言ファクトリメソッドを、すべてのクラスの特定のオブジェクトインスタンスのもともと担当していました、そして今PizzaStoreによってそのオブジェクトの作成パッケージのプロセスを達成するために、インスタンス化を担当するグループによってサブクラスにいくつかの小さな変更を行います目的。
public abstract class PizzaStore {
abstract Pizza createPizza(String item);
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
System.out.println("--- Making a " + pizza.getName() + " ---");
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
ビルドにMavenを使用したプロジェクト、テスト方法は、テストディレクトリにあります。写真は、クラスファクトリメソッドを示してい
抽象ファクトリー
Abstract Factoryパターンは、明示的に特定のクラスを指定する必要がなく、関連または依存オブジェクトの家族を作成するためのインタフェースを提供します。
すべてのピザのフランチャイズは、高品質の原材料を使用した場合、我々は様々な店舗に輸送原材料や原料の生産のための工場を建設する必要があることを確実にするためにファクトリメソッドは、次の例。抽象的な工場という工場出荷時に定義されたインターフェイスの原料を作成します。
public interface PizzaIngredientFactory {
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Pepperoni createPepperoni();
public Clams createClam();
}
異なる地域における原料工場が変更にインターフェースを達成した、と地元料理を好みに応じてパーソナライズすることができます。このように、植物材料は、特定の原料から分離されました。
抽象ファクトリクラスダイアグラム次のように:
工場出荷時のモデルは、他の原則モードのデザインを体現:依存関係逆転の原則である、抽象的に依存すると、特定のクラスに依存しません。これは、原則を示しています。あなたは、トップのコンポーネントに関係なく、抽象的に依存すべきどちらもハイレベルまたはローレベルのコンポーネントの低レベルのコンポーネントに依存し、取得することはできません。
ファクトリメソッドと抽象工場の比較
- それらが依存性を低減することによって、パッケージ化オブジェクトを作成するために使用されるアプリケーションと、特定のクラスとの間の疎結合を促進します。
- オブジェクトを作成するためのファクトリメソッドを実装するサブクラスのサブクラスを作成するために、デリゲートオブジェクト:継承を使用してファクトリメソッドです。
- 抽象ファクトリオブジェクト組成:オブジェクトを作成する方法についてにより露出ファクトリインタフェースです。
- ファクトリメソッドは、インスタンス化のサブクラスにクラスを遅らせることができます。
- 彼らの特定のクラスに依存することなく、関連するオブジェクトの家族を作成するための抽象工場。