옵저버 패턴은 변화를 감지할 동작을 설정했을 때, 해당 동작이 이루어졌다는 것을 알려주는 이벤트 핸들러를 떠올리면 쉽게 이해가 될 것이다. 특정 객체에 변화가 있었는지 늘 검사하는 것 보다, 변화가 있었을 때만 그 변화를 통보 받는 것이 관리하기 쉽기 때문에 옵저버 패턴을 사용한다. 패턴 적용 전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..
여러 다른 객체를 조합해야 할 경우, 그 객체 들을 조립하는 코드가 중복이 될 여지가 있습니다. 여러 객체를 조합해 객체를 만드는 과정을 전담하는 클래스를 두는 것을 빌더 패턴이라고 부릅니다. enum ITEM_OPTION_TYPE { ITEMOPTIONTYPE_NONE = -1, ITEMOPTIONTYPE_HEAL, ITEMOPTIONTYPE_POISON, }; class ItemOption { ITEM_OPTION_TYPE m_ItemOptionType; public: ItemOption(ITEM_OPTION_TYPE itemoptiontype){ m_ItemOptionType = itemoptiontype; } }; class ItemOptionHeal : public ItemOption { //체..
함수 동작 방식은 부모 클래스에서 정의 되고, 세부적인 처리 방법은 자식 클래스에서 재정의 하는 것을 템플릿 메소드 패턴이라고 합니다. 각 클래스 마다 고유한 같은 인터페이스를 제공하면서도, 다른 동작을 하기 위한, 객체 지향 프로그래밍에서의 다형성을 나타내는 대표적인 패턴이라고 할 수 있습니다. class ItemOption { virtual bool isUseItem(){return true;} //아이템이사용가능한상태인지 virtual bool Use(){return true;} //아이템사용 virtual bool Act() { if(!isUseItem()) return false; return Use(); } }; class ItemOptionHeal : public ItemOption { vi..
어떠한 객체를 생성할 것인지를 자식 클래스 마다 다르게 하여, 클래스마다 다른 객체를 갖도록 하는 것을 팩토리 메소드 패턴이라고 합니다. class ItemOption { //각종멤버 }; class ItemOptionHeal : public ItemOption { //체력회복기능 }; class ItemOptionPoison : public ItemOption { //독기능 }; class ItemDurationType { //각종멤버 }; class ItemDurationTypeCount : public ItemDurationType //갯수제 { //갯수제처리 }; class ItemDurationTypeTime : public ItemDurationType //시간제 { //시간제처리 }; cla..
관련성 있는 객체 집합을 생성하는 인터페이스를 제공하는 방법을 추상화 팩토리 패턴이라고 한다. 팩토리는 어떤 객체가 생성될지를 전담하는 패턴이지만, 추상화 팩토리는 어떤 분류의 객체 집합을 생성할 것인지를 정해주는 패턴이라 보면 된다. class Character { //각종멤버 }; class User : public Character { //각종멤버 }; class Npc : public Character { //각종멤버 }; class Item { //각종멤버 }; class UserItem : public Item { //각종멤버 }; class NpcItem : public Item { //각종멤버 }; class ICharacterFactory { public: virtual Character..
팩토리 패턴은 서로 관련성이 있거나 책임이 같은 클래스들을 생성해 주는 클래스를 객체 생성 과정 중간에 두어 복잡도를 줄이는 방법이다. 한마디로, 객체 생성 전담자라는 의미로 생각하면 된다.class Character { //각종멤버 }; class User : public Character { //각종멤버 }; class Npc : public Character { //각종멤버 }; class Monster : public Character { //각종멤버 }; class CharacterFactory { public: static Character * CreateUser() { return new User; } static Character * CreateNpc() { return new Npc; }..
- Total
- Today
- Yesterday
- TDD
- 바로가기 프로그램
- svn
- 게임데브포에버
- 리버스 엔지니어링
- EasyExec
- Rails
- 루비
- ruby
- EzShortcut
- CppSQLite
- RoR
- 임백준
- ftp
- 디버깅
- 게임개발포에버
- MS-SQL
- TraceRoute
- perfmon
- c언어
- 조엘 온 소프트웨어
- 좋은 프로그래머
- 디자인 패턴
- Ruby on Rails
- NDC2013
- 루비 온 레일즈
- SQLite Spy
- 엘키
- 멀티스레드
- SDL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |