팩토리 메소드 패턴1 (factory method pattern)
new 는 구상객체를 뜻한다. (인스턴스가 아닌 특정 구현을 사용한다는뜻)
Duck duck;
if(a){
duck = new ADuck();
}if(b){
duck = new BDuck();
}if(c){
duck = new ConaldDuck();
}
.....
(인터페이스) (구상클래스의 인스턴스 )
문제점이 보이는가?
여기서 인터페이스의 장점에 대해 알아보자
인터페이스에 맞춰서 코딩을 하게되면, 다형성 덕분에 어떤 클래스든 특정 인터페이스만 구현하면 사용가능하다.
반대로 구상클래스를 많이 사용하면, 추가될때마다 코드변경이 일어난다.(ocp규칙에 위배)
즉 변화에 대해 닫혀있는 코드가 되는것이다..
자 위의 코드를 다시보자.
계속 바뀌고 있는 부분이 보일것이다.
바로 new부분..이부분을 캡슐화 하면된다.
자 이제 위 코드를 캡슐화 시켜보자
public class simplePizzaFactory{
public Pizza createPizza(){
Duck duck;
if(a){
duck = new ADuck();
}if(b){
duck = new BDuck();
}if(c){
duck = new ConaldDuck();
}
}
}
이렇게 우선 객체생성부분을 따로클래스를 만들어 빼냈다.
이렇게 객체생성 부분을 빼놓게 되면, 여러가지 피자클래스를 만들어야 하는 상황에서
simplePizzaFactory를 호출하여 코드 중복없이 사용할 수 있다.
이클래스를 호출시에는
생성자를 통해 아래와 같이 호출한다
..생략..
public PizzaStore(SimplePizzaFactory factory){
this.factory = factory
}