티스토리 뷰
Factory Method Pattern - 디자인 패턴
참고서적 : Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
패턴 정의 #4 - Factory Method Pattern
팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데,
어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다.
팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브 클래스에 맡기는 것이죠.
Creator 추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공하고 있습니다.
Creator 추상 클래스에 구현되어 있는 다른 메소드에서는 팩토리 메소드에 의해 생산된 제품을 가지고 필요한 작업을 처리합니다.
하지만 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어 내는 일은 서브클래스에서만 할 수 있습니다.
- Creator에는 제품을 가지고 원하는 일을 하기 위한 모든 메소드들이 구현되어 있습니다.
하지만 제품을 만들어 주는 팩토리 메소드는 추상 메소드로 정의되어 있을 뿐 구현되어 있진 않습니다.
- Creator의 모든 서브클래스에 factoryMethod() 추상 메소드를 구현해야 합니다.
- ConcreteCreator에서는 실제로 제품을 생산하는 factoryMethod()를 구현해야 합니다.
- 제품 클래스에서는 모두 똑같은 인터페이스를 구현해야 합니다.
그래야 그 제품을 사용할 클래스에서 구상 클래스가 아닌 인터페이스에 대한 레퍼런스를 써서 객체를 참조할 수 있으니까요.
팩토리 메소드 패턴은 실제로 많이 사용하는 형태입니다.
여기에서 중요한 개념은 "서브클래스에서 객체 인스턴스를 생성한다"인 것 같습니다.
다음 Pizza 예제에서도 NYPizzaStore나 ChicagoPizzaStore에서 createPizza()라는 팩토리 메소드를 통해 인스턴스를 생성하구요..
실제 주문은 상위 클래스인 PizzaStore의 orderPizza()에서 이루어 지는 것이죠..
마지막으로 createPizza()는 어떤 스타일의 Pizza를 만들어야 할 지를 결정하는 구문이 포함되어 있는 겁니다.
즉, 제품 클래스인 Pizza를 실질적으로 생성하는 것입니다.
'XML Developer > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴#6] 싱글턴 패턴 (0) | 2007.05.22 |
---|---|
[디자인 패턴#5] 추상 팩토리 패턴 (0) | 2007.05.09 |
[디자인 패턴#3] 데코레이터 패턴 (0) | 2007.04.27 |
[디자인 패턴#2] 옵저버 패턴 (0) | 2007.04.24 |
[디자인 패턴#1] 스트레티지 패턴 (0) | 2007.04.20 |
댓글
Blog is powered by
Tistory / Designed by
Tistory