객체 생성의 책임을 분리하자.
요구사항 변경에 의해 객체 생성에 필요한 코드가 자꾸 바뀌는 경우에 사용할 수 있다. 객체 생성에 필요한 과정을 템플릿처럼 정해서 다른 책임들로부터 분리할 수 있다.
객체를 생성하는 부분이 요구사항에 따라 바뀌는 부분이므로, 객체 생성 책임을 별도의 객체인 Factory에 할당한다.
피자 가게에서 주문 요청을 받으면 피자를 만들어 굽고 잘라서 박스에 넣으려고 한다. 이때 피자의 종류는 세 가지이고, 피자의 종류는 문자열로 구분한다.
피자 가게인 PizzaStore이 피자 생성과 주문 메시지를 받을 수 있다. 이때 SimplePizzaFactory는 문자열에 따라 피자를 생성하는 책임을 구현한다.
여전히 OCP 원칙을 위반한다. 위의 피자 예시에서 하와이안 피자를 추가해달라는 요구사항이 생기면, SimpleFactory의 createPizza()의 분기 처리 코드를 수정해야 한다.