-
생성패턴 : Builder 패턴디자인패턴 2012. 12. 28. 09:30
분류 : 생성패턴(Creational Patterns)
정의 :
복잡한 객체의 생성을 표현과 분리함으로써 같은 생성절차를 가지면서 다른 표현들을 만들수 있게 함.
용도 :
- Builder 패턴은 복잡한 객체를 단계적으로 생성하는 것에 초점을 둠.
- Builder 패턴은 종종 Composite 패턴을 만듬.
구조 :
Builder : 객체를 생성하기위한 추상 인터페이스
Concrete Builder : Builder에 대한 구현을 제공. 다른 객체들을 생성할수 있는 객체임.
코드 :
/** Product */ public class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void setDough(String dough) { this.dough = dough; } public void setSauce(String sauce) { this.sauce = sauce; } public void setTopping(String topping) { this.topping = topping; } public String getDough(){ return dough; } public String getSauce(){ return sauce; } public String getTopping(){ return topping; } } /** Abstract Builder */ public abstract class PizzaBuilder { protected Pizza pizza; public Pizza getPizza() { return pizza; } public void createNewPizzaProduct() { pizza = new Pizza(); } public abstract void buildDough(); public abstract void buildSauce(); public abstract void buildTopping(); } /** ConcreteBuilder */ public class HawaiianPizzaBuilder extends PizzaBuilder{ public void buildDough() { pizza.setDough("cross"); } public void buildSauce() { pizza.setSauce("mild"); } public void buildTopping() { pizza.setTopping("ham+pineapple"); } } /** ConcreteBuilder */ public class SpicyPizzaBuilder extends PizzaBuilder{ public void buildDough() { pizza.setDough("pan baked"); } public void buildSauce() { pizza.setSauce("hot"); } public void buildTopping() { pizza.setTopping("pepperoni+salami"); } } /** Director */ public class Waiter { private PizzaBuilder pizzaBuilder; public void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilder = pb; } public Pizza getPizza() { return pizzaBuilder.getPizza(); } public void constructPizza() { pizzaBuilder.createNewPizzaProduct(); pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping(); } } public class BuilderExample { /** * A customer ordering a pizza */ public static void main(String[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder(); //이 부분에서 hawaiianPizzaBuilder, spicyPizzaBuilder를 번갈아서 입력하면서 출력되는 내용을 확인해 보면 됨. waiter.setPizzaBuilder( spicyPizzaBuilder ); waiter.constructPizza(); Pizza pizza = waiter.getPizza(); System.out.println(pizza.getDough()); System.out.println(pizza.getSauce()); System.out.println(pizza.getTopping()); } }
참고자료
GoF의 디자인패턴, 피어슨에듀케이션코리아, 2002
'디자인패턴' 카테고리의 다른 글
생성패턴 : Singleton 패턴 (0) 2013.01.16 생성패턴 : Prototype 패턴 (0) 2013.01.15 생성패턴 : Factory Method 패턴 (0) 2013.01.10 생성패턴 : Abstract Factory 패턴 (0) 2012.12.18 디자인패턴 (0) 2012.11.13 댓글