ファクトリモード2
12242 ワード
抽象ファクトリモード
これは、相互に関連付けられたオブジェクトインタフェースまたは依存するオブジェクトインタフェースを提供する方法です.
以前に作成したクラスを表示します.
2つの抽象レベルのピザ、ピザStoreがあります
その下には、それぞれのピザやピザ屋が存在します.
どこでピザを作っても、生地やチーズなどの材料を繰り返し入れます.
そのため、様々な材料を作るPizzaIngredentFactoryは、このインターフェースを受けて、それぞれのピザのスタイルで工場を実施すればよいのです.
public interface PizzaIngredientFactory {
public Dough createDough(); // 각 재료별 클래스가 추가되었다.
public Sauce createSauce();
public Cheese createCheese();
public Pepperoni createPepperoni();
}
このインタフェースを受け入れるNYPizzaIngredent Factoryです.public class NYPizzaIngredientFactory implements PizzaIngredientFactory {
public Dough createDough() {
return new ThinCrustDough();
}
public Sauce createSauce() {
return new MarinaraSauce();
}
public Cheese createCheese() {
return new ReggianoCheese();
}
public Pepperoni createPepperoni() {
return new SlicePepperoni();
}
public Clams createClam() {
return new FreshClams();
}
}
public class NYPizzaStore extends PizzaStore {
protected Pizza createPizza(String item) {
Pizza pizza = null;
PizzaIngredientFactory ingredientFactory = new NYPizzaIngredientFactory();
if (item.equals("cheese")) {
pizza = new CheesePizza(ingredientFactory);
pizza.setName("New York Style Cheese Pizza");
} else if (item.equals("clam")) {
pizza = new ClamPizza(ingredientFactory);
pizza.setName("New York Style Clam Pizza");
} else if (item.equals("pepperoni")) {
pizza = new PepperoniPizza(ingredientFactory);
pizza.setName("New York Style Pepperoni Pizza");
}
return pizza;
}
}
NYPizzaStoreが受け取ってピザを作るレベルですNYPizzaIngredentFactoryを入手し、ここで材料を作って使う方法.
public class CheesePizza extends Pizza {
PizzaIngredientFactory ingredientFactory;
public CheesePizza(PizzaIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}
void prepare() {
System.out.println("Preparing " + name);
dough = ingredientFactory.createDough();
sauce = ingredientFactory.createSauce();
cheese = ingredientFactory.createCheese();
}
}
最終的にピザが決定されると、選択されたピザでは、生成者によってIngreedintFactoryが得られ、create法によって様々な材料が作られる.メリットとデメリット
したがって,モードを用いることで実装クラスへの依存性を低減でき,抽象的なDIPをうまく守ることができる.ただし、インタフェースの作成、新しいオブジェクトの作成、変更が必要な場所はたくさんあります.
n/a.結論
簡約工場,工場法,抽象工場ともに結論的にばらばらに結合し,変化した部分をカプセル化することにより,変更(OCP)依存性を減らす観点から有意である(DIP).
Reference
この問題について(ファクトリモード2), 我々は、より多くの情報をここで見つけました https://velog.io/@blacklandbird/팩토리-패턴2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol