Programming/Design Pattern2011. 7. 27. 01:17

[Head First Design Patterns을 참고했습니다. 저작권에 걸린다면 삭제하겠습니다.]

예를들어 피자집에서 피자 클래스를 상속받아 나머지 피자들을 구현할 경우 new를 이용한 구상 클래스 때문에 코드를 재수정 해야하는 부분이 상당히 존재한다.
피자의 이름이 바뀐다거나, 새로운 종류가 추가되거나, 잘 안팔리는 종류를 메뉴에서 삭제가 되는 경우도 그 예로 들 수 있다.
주로 if - else if -else나 switch로 처리를 할 것이다.

그런경우 구상 클래스 구현 부분을 캡슐화 시키고 Factory라는 한 클래스를 사용하면 된다? 
->그럼 Factory 안에다 그 코드를 옮겨서 캡슐화만 했을 뿐 따로 달라지는 내용이 없다?
->-> 전화 주문, 매장 주문, 인터넷 주문, ARS 주문 등 4가지 주문에서 들어가는 코드를 각각에서 모두 수정할 필요 없이 Factory에서만 수정하면 된다. 

다음은 팩토리 패턴이 피자집 클래스이다.



public class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }


객체를 생성하는데 구상 클래스(new)를 사용하지 않고 팩토리에 type을 전달해 주는 형식.
물론 createPizza 메서드 안에는 구상클래스 구현부분이 들어간다 

그럼 왜 이제 Factory 패턴인지 이해가 될 것이다. 피자집에서는 피자를 팔기위해서는 피자를 만들어야 하는데 이 피자를 만드는 부분을 SimplePizzaFactory 클래스인 factory 객체가 만드는 것이다. 바로 피자 공장인 것이다.


 



Posted by 슈퍼 점프