개발/DesignPatterns

4. Factory Method Pattern(팩토리 메소드 패턴)

huiyu 2014. 7. 6. 23:23

Factory Method Design Pattern

(팩토리 메소드 패턴)


Define

 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다.


Structure

Scheme of Factory Method


 Creator추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공.

 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어내는 일은 서브클래스에서만 할 수 있다.
사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정

Advantage

 - 객체의 생성을 한군데서 관리할 수 있다.

 -  동일한 인터페이스 구현으로 새로운 객체가 추가되더라도 소스의 수정이 없다.
 - 제품을 생성하는 부분과 사용하는 부분을 분리

Code-Java

Pizza class

//피자 클래스 public class Pizza { String name; String dough; String sauce; ArrayList toppings = new ArrayList<>(); public void prepare(){ System.out.println("Preparing " + name); System.out.println("Tossing dough..."); System.out.println("Adding sauce..."); System.out.println("Adding topping: "); for(int i=0; i<toppings.size(); i++){ System.out.println(" "+toppings.get(i)); } } public void bake(){ System.out.println("Bake for 25minutes at 350"); } public void cut(){ System.out.println("Cutting the pizza into diagonal slices"); } public void box(){ System.out.println("Place pizza in official PizzaStore box"); } public String getName(){ return name; } } //다양한 피자 class CheesePizza extends Pizza{ } class PepperoniPizza extends Pizza{ } class ClamPizza extends Pizza{ } class VeggiePizza extends Pizza{ }


Pizza 생성 클래스-팩토리 메소드

public abstract class PizzaStore { public PizzaStore() { } Pizza orderPizza(String type){ Pizza pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } //피자를 생성해주는 추상 메소드 abstract Pizza createPizza(String type); } class CheesePizzaStore extends PizzaStore{ //실제 피자 생성부분 @Override Pizza createPizza(String type) { return new CheesePizza(); } } class VeggiePizzaStore extends PizzaStore{ @Override Pizza createPizza(String type) { return new VeggiePizza(); } }


728x90
반응형