Design Architecture/Design Pattern 예제

팩토리 메소드(Factory Method) 패턴 예제

lipnus 2021. 9. 26. 14:19
반응형

 

 

 

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