Simple Factory

핵심 의도

객체 생성의 책임을 분리하자.

적용 상황

요구사항 변경에 의해 객체 생성에 필요한 코드가 자꾸 바뀌는 경우에 사용할 수 있다. 객체 생성에 필요한 과정을 템플릿처럼 정해서 다른 책임들로부터 분리할 수 있다.

솔루션의 구조와 각 요소의 역할

Untitled

객체를 생성하는 부분이 요구사항에 따라 바뀌는 부분이므로, 객체 생성 책임을 별도의 객체인 Factory에 할당한다.

적용 예시

요구사항

피자 가게에서 주문 요청을 받으면 피자를 만들어 굽고 잘라서 박스에 넣으려고 한다. 이때 피자의 종류는 세 가지이고, 피자의 종류는 문자열로 구분한다.

설계

피자 가게인 PizzaStore이 피자 생성과 주문 메시지를 받을 수 있다. 이때 SimplePizzaFactory는 문자열에 따라 피자를 생성하는 책임을 구현한다.

코드

한계

여전히 OCP 원칙을 위반한다. 위의 피자 예시에서 하와이안 피자를 추가해달라는 요구사항이 생기면, SimpleFactory의 createPizza()의 분기 처리 코드를 수정해야 한다.

Factory Method