Abstract Factory 패턴


Abstract Factory 패턴




정의


  • 제품군의 생성을 전담할 Base Factory 클래스를 정의하고, Base Factory 클래스를 상속받은 제품군별 Factory 클래스를 정의한 형태.
  • 어떤 조건에 객체를 생성해야할 때, 직접 객체를 만들기보다는 객체를 생성시키는 클래스를 만들어서 전담시키는 것이 Abstract Factory 패턴의 개념이다

  • (GOF책의 정의) 특정 제품군에 속하는 제품 객체를 생성하는 프로그램을 한 곳에 모아, 새로운 제품군의 추가가 용이하게 만든 클래스 설계



상황


  • 던전앤파이터에는 아군 APC 소환용 아이템이 있다. 던파의 APC의 종류는 다양하지만, 지금은 솔도로스와 비연이라는 APC만 소환할 수 있다.

  • 솔도로스와 비연을 소환하기위해서는 솔도로스 인형, 비연 인형이 필요하다.

  • 나도 이번에 우연히 알게됬지만, APC란 용어는 처음 들어본다. APC는 AI-Player-Character의 약자로 AI로 움직이는 플레이어 캐릭터란 뜻이다.





                   



    

                       



  

그림의 공장은 이해를 돕기위한 용도로 Factory 클래스를 비유했다.

즉, APC 인형 아이템이란 재료를 Factory 클래스에 넣으면 APC가 생산되는 것이다.


코드


 #include <iostream>


class APC

{

virtual void Print() = 0;

}


class Soldoroseu :public APC

{

virtual void Print() 

{

std::cout << "솔도로스 생성" << std::endl;

}

}


class Paris :public APC

{

virtual void Print()

{

std::cout << "패리스 생성" << std::endl;

}

}


class APCFactory

{

virtual APC* CreateAPC() = 0;

}


class SoldoroseuFactory :public APCFactory

{

virtual APC* CreateAPC()

{

return new Soldoroseu();

}

}


class ParisFactory :public APCFactory

{

virtual APC* CreateAPC()

{

return new Paris();

}

}


enum

{

Soldoroseu = 0,

Paris = 1

}


void main()

{

APCFactory* factory = NULL;

APC* apc = NULL;


int apcType = 0;



switch(apcType)

{

case Soldoroseu:

factory = new SoldoroseuFactory();

break;


case Paris:

factory = new ParisFactory();

break;

}


apc = factory->CreateAPC();


delete factory;

delete apc;


return 0;

}



장점


  • 객체의 생성을 독립적으로 관리할 수 있다.
  • 관련된 제품군을 묶어서 생성할 수 있다.
  • 여러 제품군중에 사용할 제품군을 쉽게 생성할 수 있다.
  • (GOF책에서) 제품군이 여러 개 존재하고, 생소되는 객체가 항상 같은 제품군에 속하고 싶을 때에 좋다.



단점


  • 제품군이 추가될때마다 새로운 Factory 클래스를 정의해야한다.
  • 새로운 종류의 제품이 추가될 때, 모든 Factory 클래스를 수정해야한다. 이는 Factory 클래스가 생성할 제품의 종류에따라 각기 다른 멤버함수를 가지고 있기 때문이다.

  • 위의 2개의 단점을 해결하는 방법으로는 다음에 소개할 원본 객체를 복사해서 생성하는 프로토타입 패턴이 있지만, 근본적으로 해결된다고 보기는 어려울 것같다.



-------------------------------------------------------------------------------------------------------------------

군대 복무하면서 쓰기 참 힘들다..;ㅅ;

상황이 좀 잘못된 것같은데..재료를 넣으면 생산되는 경우의 수가 더 많은 상황을 만들어야했을 것같은데;

사진꺠졌닼ㅋㅋㅋㅋ

'프로그래밍 > 프로그래밍 관련' 카테고리의 다른 글

Singleton 패턴  (0) 2016.10.22
ProtoType 패턴  (0) 2016.10.15
Cookie, Session 그대의 의미는..  (0) 2015.10.29
URL과 URI 차이점  (0) 2015.10.27
Unity Corutine  (0) 2015.10.19
더보기

댓글,

Lowpoly

게임 서버 프로그래머 지망생