[간단한 경우]
instance 를 만들기 위해
'A부모'의 생성자의 인수대로 작성해야 하는 상황이 발생 할 수 있는데
다른 곳에서도 A 클래스를 만들려고 할때 불필요하게 생성자 인수를 작성해야 하니 불필요한 일이 생길 수 있어서
class A{
public :
A Createinstance(){
return A( "내용", 1234, 3 );
}
}
로써 인스턴스를 얻는 방법
Factory Method : 공장처럼 인스턴스 찍어주는 함수
[사용범위를 좀더 확장한경우]
객체를 생성할때 FactoryMethod() 함수로 객체를 생성 할 경우
class A{
FactoryMethod()
class B : public A{
FactoryMethod()
...
객체 생성을 서브클래스에서 정의하는 경우에 사용 할 수 있는데
이렇게 하는 이유는 서브 클래스들에서 어떤 클래스로 생성이 결정 된다면
해당 클래스를 리턴해주긴 하지만 즉 다양한 클래스인스턴스를 넘겨줄 순 있지만
인스턴스를 만드는 명령키워드는 하나라는 것
하지만 이때 FactoryMethod 에 분류하기 위한 인수를 넘기는건 좋지 못한데
왜냐하면 그 분류키워드가 생성에서 그 분류키로 해당 클래스를 사용하는데 다른
곳에서도 분류가 되어야 하는 상황이 오면 그 키를 넘겨줘야 하기 때문
그래서 이때 하위 클래스와 부모 클래스는 abstract 패턴으로 만들어 확장이 용이 하고 구분 될 수 있도록 구성 하는 것이 좋다
[좀 더 사용범위를 좀더 확장한경우]
ConcreteApplicaiton : public application {
....
의 구조일 경우 어플리케이션에서는 생성되는 (포인터)오브젝트들에 대해 리스트, 벡터등의 자료 구조로 가지고 있지만
생성은 application 에서 하지 않고 ConcreteAppliation 에게 생성 부분을 위윔하게 하고
ConcreteApplication 클래스에서 생성된 클래스의 함수들이 Application 의 virtual 함수르 통해 실행 시키는 구조
- 구조정리 : Application 클래스를 경유하도록 하지만 관리를 위해 Application 클래스 내에 오브젝트들의 포인터를 가지고 있는 구조
=> 각 A, B, C 라는 독립적으로 돌아가는 프로세스가 있을때 각각에 대한 것들을 각각 관리하길 원할때
A 에 관련된 모든 사항을 A 에서 통제하길 원하고
B 에 관련된 모든 사항을 B 에서 통제하길 원할때
---->Create명령 > --------------- > A.Create() ---> A 가 사용하게 될 관련 클래스 생성
---->Copy 명령 > --------------- > | A 에 게 Copy 명령이 전달 |--------------- > A 에 의한 A 관련 Copy 명령 처리
---->Create명령 > --------------- > B.Create() ---> B 가 사용하게 될 관련 클래스 생성
---->Copy 명령 > --------------- > | B 에 게 Copy 명령이 전달 |--------------- > A 에 의한 A 관련 Copy 명령 처리
본래의 Create 명렬을 A 가 받아 A 가 돌리게 될 관련 클래스들을 A가 대신 생성하는(위임받아 생성) 형식
∴
A 에 의해 생성된것들은 A가 관리한다
B 에 의해 생성된것들은 B가 관리한다
장점 : 수정이 유연하다, 변경이 필요할 경우 기존에 생성된 것들에 대한 클래스 정의 없이 필요한 부분만 작성하면 되기때문
다른 패턴에 비해 덜 복잡하다
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
Singleton 패턴 , n 개 까지만 생성하고 싶다 (0) | 2012.11.02 |
---|---|
Prototype 패턴 (0) | 2012.11.02 |
Proxy 패턴 (0) | 2012.11.02 |
flyweight 패턴 (0) | 2012.11.02 |
Facade 패턴 (0) | 2012.11.02 |