블로그 이미지

3DMP engines

3D그래픽스 물리 수학, 프로그래밍 GPU Shader 게임엔진 알고리즘 디자인패턴 matlab etc..





[간단한 경우]

 

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가 관리한다

 

 

 


 

장점 : 수정이 유연하다, 변경이 필요할 경우 기존에 생성된 것들에 대한 클래스 정의 없이 필요한 부분만 작성하면 되기때문

          다른 패턴에 비해 덜 복잡하다

 

 

저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts