여러환경에 대해 설계 된 상속 구조가 있고 해당 조건(환경) 에대한 조건이 주어지면
조건에 대한 객체의 new 를 리턴해주는 패턴
이로써 switch 분기문을 없앨 수 있다
다른 환경을 지원하기 위한 패턴
최악의 방법 : 따로따로 맞게 다 짠다
위에보다 나은 방법 :
일단 하나의 프로그램 내에서 짠다 : switch , if 구문으로 분기 해서 처리
but 변경 되는 부분마다 이부분을 처리
그렇다면 how?
분기 구문을 피하면서 변화된 부분을 따로 구성 해야 한다
또한 나중에 추가 되는 부분을 지원해 줄 수 있어야 한다( 확장성 )
부모 A 와 각 환경별의 자식 클래서 B,C,D....N 클래스를 구성해
상속 구조를 만들어 놓고 자식에서 해당 환경의 생성부분을 만들어주면
분기문을 피할 수 있고, 각각 독립적으로 구성 할 수 있다
- 프로그램 처음 세팅시 환경에 대해 조사해보고 해당 환경의 자식 클래스로 세팅한다
(해당 환경의 new 하여 부모에게 다운 캐스팅)
이때 E0, E1 이라는 환경이 존재 한다고 할때 각각의
E0 ,E1 에 대한 서브클래스를 만들어 놓고 생성 함수명을 동일하게 작성한다(virtual 키워드로)
필요한 객체 생성은 환경에 대한 Create 함수를 호출할때 해당환경의 자식 클래스에서 필요한 클래스들을 생성(new) 한다
이렇게 생성된 객체의 포인터를 반환해 처음 환경을 조사하는 부분으로 다시 되돌아오면 이 포인터들로 작업을 하면 된다
그렇게 한다면 동일한 이름으로 각 환경에 맞는 프로그램을 설계할 수 있다
하지만 E0, E1 의 두개일 경우 클래스가 2배가 된다, n 개가 되면 n 배가 된다
하지만 처음 생성할때는 분기문이 한번은 들어가야 한다, 이것을 피할 수 있는 방법이 있다면 좋겠지만
일반적으로 이부분은 힘들다고 보여진다
Abstract(추상) 이란 이름이 붙은 이유는 부모가 생성될 필요는 없고 그냥 virtual void MethodName()=0 순수가상함수를 담고 잇는
추상 클래스 로써 존재하기 때문
Abstract Factory 패턴은 Singleton 패턴과 혼용해 쓰일 수 있는데
각 환경에 대한 설정들이기 때문에 자식의 자식을 생성하는 경우는 많지 않다
대부분 부모 A 의 자식 1개 로 끝나는 상황이라면 Singleton 과 연계하여 사용
Abstract Factory 패턴은 Prototype 과 Factory method 패턴을 조합한 패턴으로 대체할 수 있다
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
디자인 패턴 Why?, 그리고 목적 (0) | 2012.11.02 |
---|---|
추상화 기초 클래스(abstract base class : ABC) (0) | 2012.11.02 |
builder 패턴 (0) | 2012.11.02 |
command 패턴 (0) | 2012.11.02 |
instance Pool 패턴 (0) | 2012.11.02 |