반응형
public abstract class PizzaStre{
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
abstract Pizza createPizza(String type); // 인스턴스 만드는건 팩토리 역할을 하는 매소드에서 처리
}
public class NyPizzaStore extends PizzaStre {
@Overide
public Pizza createPizza(String type) {
Pizza pizza = null;
if(type.equal("cheese")) pizza = new NyStyleCheesePizza();
if(type.equal("peper")) pizza = new NyStylePepperoniPizza();
if(type.equal("clam")) pizza = new NyStyleClamPizza();
if(type.equal("veggie")) pizza = new NyStyleVeggiePizza();
return pizza;
}
}
public class ChicagoPizza extends PizzaStre {
@Overide
public Pizza createPizza(String type) {
Pizza pizza = null;
if(type.equal("cheese")) pizza = new ChicagoStyleCheesePizza();
if(type.equal("peper")) pizza = new ChicagoStylePepperoniPizza();
if(type.equal("clam")) pizza = new ChicagoStyleClamPizza();
if(type.equal("veggie")) pizza = new ChicagoStyleVeggiePizza();
return pizza;
}
}
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList<String> toppings = new ArrayList<>();
public void prepare() {
System.out.println("피자이름 : " + this.name);
System.out.println("도우" + this.dough);
System.out.println("소스: "+ this.souce);
System.out.println("토핑준비");
for(String topping : toppings) {
SYstem.out.println("topping:" + topping);
}
}
public void bake() {
System.out.println("굽는다");
}
public void cut() {
System.out.println("자른다");
}
public void box() {
System.out.println("포장한다");
}
public String getName() {
return this.name;
}
}
public class NYStyleCheesePizza extends Pizza{
public NYStyleCheesePizza() {
this.name = "NY Style CheesePizza";
this.dough = "Thin Crust Dough";
this.sauce = "Marinara Sauce";
this.toppings.add("Grated Reggiano Cheese");
}
}
public class ChicagoStyleCheesePizza extends Pizza{
public ChicagoStyleCheesePizza() {
this.name = "Chicago Style CheesePizza";
this.dough = "Extra Thick Crust Dough";
this.sauce = "Plum Tomato Sauce";
this.toppings.add("Shredded mozzarella Cheese");
}
@Override
public void cut() {
System.out.println("Cutting the pizza into square slices");
}
}
https://jusungpark.tistory.com/14?category=630296
디자인패턴 - 팩토리 패턴 (factory pattern)
팩토리 패턴 (factory pattern) 팩토리 메소드 패턴 : 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 즉 팩토리 메소드 패
jusungpark.tistory.com
반응형
'Design Architecture > Design Pattern 예제' 카테고리의 다른 글
Composite 패턴 예제 (0) | 2021.09.28 |
---|---|
Decorator 예제 (0) | 2021.09.28 |
Template Method 예제 (0) | 2021.09.28 |
빌더(Builder) 패턴 예제 (0) | 2021.09.26 |
추상 팩토리(Abstract Factory)패턴 예제 (0) | 2021.09.26 |