2013. 12. 15. 19:10
팩토리메서드 --------------------------------------------------------------------------------------------------
팩토리 메서드는 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할 지에 대한 결정은 서브클래스가 내리도록 하는 패턴입니다.
상속과 다형성을 이용하는 방법입니다.
패턴 적용 스토리 -----------------------------------------------------------------------------------------------
게임내에서 아이템드랍방식을 생각해보면 몬스터가 죽였을때 아이템이 생성되어야 합니다.
아이템의 종류는 무기, 방패, 갑옷의 세종류가 있으며 타입마다 다른 아이템을 사용하여 리턴합니다.
팩토리 메서드패턴은 생성 클래스 자체를 추상화하여 각 아이템별 생성클래스를 생성하거나 혹은 생성 클래스 내부에서 인자값을 받아 그에 맞는 아이템클래스를 생성할수 있습니다.
이번에는 인자값을 받아서 그에 맞는 아이템 클래스를 생성하는 패턴으로 가보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #pragma once #include "stdafx.h" enum ITEM_TYPE { ITEM_TYPE_WEAPON, ITEM_TYPE_SHIELD, ITEM_TYPE_ARMOR, ITEM_TYPE_COUNT }; class CItem { public: CItem(void) {} ~CItem(void) {} }; class CWeapon : public CItem { public: CWeapon(void) {} ~CWeapon(void) {} }; class CShield : public CItem { public: CShield(void) {} ~CShield(void) {} }; class CArmor : public CItem { public: CArmor(void) {} ~CArmor(void) {} }; class CItemCreator { public: CItem* CreateItem(ITEM_TYPE eItemType) { CItem* pItem = NULL; switch(eItemType) { case ITEM_TYPE_WEAPON: pItem = new CWeapon; cout << "무기가 드랍됨" << endl; break; case ITEM_TYPE_SHIELD: pItem = new CShield; cout << "방패가 드랍됨" << endl; break; case ITEM_TYPE_ARMOR: pItem = new CArmor; cout << "갑옷이 드랍됨" << endl; break; default: cout << "꽝 아이템 없음 ㅋㅋㅋ" << endl; break; } return pItem; } public: CItemCreator(void) {} ~CItemCreator(void) {} }; int _tmain(int argc, _TCHAR* argv[]) { srand((unsigned)time(NULL)); CItemCreator ItemCreate; for(int i = 0; i < 10 ; ++i) { srand((unsigned)time(NULL)); int j = rand() % 5; Sleep(500); ItemCreate.CreateItem( (ITEM_TYPE)(j) ); } return 0; } |
'게임개발공부 > 디자인패턴' 카테고리의 다른 글
생성패턴 <프로토 타입> (0) | 2013.12.17 |
---|---|
쓰레드 환경에서 싱글톤? (0) | 2013.12.16 |
생성패턴 <빌더> (0) | 2013.11.24 |
생성패턴 <추상팩토리> (0) | 2013.11.20 |
하루에 패턴 하나씩! <GOF> <패턴 시작전에... > (0) | 2013.11.19 |