개발이슈/디자인패턴

팩토리 메소드 패턴1 (factory method pattern)

kalkin 2013. 11. 12. 17:35

 

 

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

}