어떤 객체가 수행하는 기능을 그대로 수행하면서, 부가적인 기능을 수행하거나 기존 역할을 대행하기 위해 새 클래스를 정의하고, 새로 정의된 클래스를 통해서 외부와 통신하는 것을 프록시 패턴이라고 합니다. class IObject { public: virtual void Use() = 0; }; class QuickSlot { IObject *m_piObejct; public: bool isExist() { return m_pObejct != NULL ? true : false; } void Use() { if(m_pObejct) m_pObejct->Use(); } }; class QuickSlotProxy { QuickSlot *m_pQuickSlot; public: QuickSlotProxy() : m_..
범용 적으로 사용 될 수 있는 알고리즘을 독립적인 클래스로 구성하고, 해당 클래스를 선택적으로 사용할 수 있게 하는 것을 스트래티지 패턴이라고 합니다. 스테이트 패턴과 비슷한 점이 많은 패턴이지만, 범용적으로 사용 될 수 있는 알고리즘을 독립시킨다는 점에서 차이가 있습니다. class Sort { public: virtual void Sort(int * pScore) = 0; }; class BubbleSort : public Sort { public: virtual void Sort(int *pScore) { //버블정렬 } }; class QuickSort : public Sort { public: virtual void Sort(int *pScore) { //퀵정렬 } }; class Score {..
내부적인 상태에 따라 다른 동작을 해야 될 경우, 각 동작의 enum형을 정의하고, 그에 따른 동작을 정의하면 다음과 같은 코드 구조가 될 것이다. enum NPC_STATE { NPCSTATE_WANDERING = 0, //배회하기 NPCSTATE_DETECTING, //적탐지루틴검사 NPCSTATE_RUSH, //돌격모드. 타겟에게돌격하는상태 NPCSTATE_FIGHT, //전투모드타겟을적으로 }; class Npc { NPC_STATE m_NpcState; public: void SetNpcState(NPC_STATE NpcState){m_NpcState = NpcState;} void Wandering(); void Detecting(); void Rush(); void Fight(); void ..
옵저버 패턴은 변화를 감지할 동작을 설정했을 때, 해당 동작이 이루어졌다는 것을 알려주는 이벤트 핸들러를 떠올리면 쉽게 이해가 될 것이다. 특정 객체에 변화가 있었는지 늘 검사하는 것 보다, 변화가 있었을 때만 그 변화를 통보 받는 것이 관리하기 쉽기 때문에 옵저버 패턴을 사용한다. 패턴 적용 전class GameMonitor { public: GameMonitor(int nCurrentUserCount, int nRoomCount) : m_nCurrentUserCount(nCurrentUserCount) , m_nCurrentRoomCount(nRoomCount) { } void SetCurrentUserCount(int nCurrentUserCount) { m_nCurrentUserCount = nC..
이미 존재하는 코드와 내가 원하는 인터페이스가 서로 다를 때, 인터페이스들 간에 소통을 돕는 연결 클래스를 두는 것이 좋습니다. 그렇게 중재자 역할을 해주는 클래스를 쓰는 것을, 어댑터 패턴이라고 부릅니다. 패턴 적용 전 enum QUEST_TYPE { QUESTTYPE_NONE = -1, QUESTTYPE_ORDER, QUESTTYPE_INSTANCE, }; const int MAX_ORDER_QUEST_NO = 1000; class OrderQuest { int m_nLastOrderQuestNo; public: OrderQuest(int a_nLastOrderQuestNo) { m_nLastOrderQuestNo = a_nLastOrderQuestNo; } bool isQuestRecvState()..
프로그램을 작성하다보면, 특정 객체의 복사본이 필요할 때가 있다. 이럴 때, 팩토리를 이용해 같은 종류의 객체를 만든 후 필요한 데이터를 복사하는 방식은 매우 번거롭습니다. 이 때 복사 생성자등을 통해 객체의 복사본을 만드는 것을 프로토타입 패턴이라고 합니다. class Item { protected: int m_nItemIdx; //아이템고유번호 int m_nItemNo; //아이템식별번호 public: Item() { m_nItemIdx = -1; m_nItemNo = -1; } Item(const Item & a_Item) { m_nItemIdx = a_Item.m_nItemIdx; m_nItemNo = a_Item.m_nItemNo; } virtual Item *Clone(){ return new..
- Total
- Today
- Yesterday
- EasyExec
- 루비 온 레일즈
- 디자인 패턴
- 임백준
- ruby
- 리버스 엔지니어링
- TraceRoute
- 게임개발포에버
- 루비
- perfmon
- EzShortcut
- CppSQLite
- 디버깅
- 좋은 프로그래머
- SDL
- ftp
- 바로가기 프로그램
- 멀티스레드
- SQLite Spy
- 게임데브포에버
- svn
- c언어
- TDD
- Ruby on Rails
- MS-SQL
- 조엘 온 소프트웨어
- RoR
- 엘키
- Rails
- NDC2013
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |