Factory Method Design Pattern
(팩토리 메소드 패턴)
Define
팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다.
Structure
Creator추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공.
Advantage
- 객체의 생성을 한군데서 관리할 수 있다.
Code-Java
//피자 클래스 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(); } }
'Software Development > DesignPatterns' 카테고리의 다른 글
6. Singleton Pattern(싱글턴 패턴) (0) | 2014.07.20 |
---|---|
5. Abstract Factory Pattern(추상 팩토리 패턴) (0) | 2014.07.20 |
3. Decorate Pattern(데코레이트 패턴) (0) | 2014.07.06 |
2. Observer Pattern(옵저버 패턴) (0) | 2014.07.04 |
1. Strategy Pattern(전략패턴) (0) | 2014.07.03 |