Cocosd - x 디자인 모델 의 3: 관리자 모델

13105 단어
독자 들 이 이 문 제 를 보 자마자 또 궁금 해 할 것 이다. 신 마 는 또 '관리자 모델' 이 냐?
관리자 (Manager) 는 코코아 의 NSFontManager, NSInputManager, NSFileManager 와 NSLayoutManager 등 다른 종류의 실례 를 전문 적 으로 관리 하 는 클래스 입 니 다.이 모델 은 '2 단 구축 모델' 과 마찬가지 로 GoF 의 23 개 디자인 모델 에 도 등장 하지 않 았 지만, '코코아 디자인 모델' 이라는 책 에 언급 돼 있어 관심 있 는 독자 들 이 찾 아 볼 수 있다.
1. 응용 필드:
cocos2d - x 에서 대량의 응용 이 있 습 니 다. 예 를 들 어 예전 에 소개 한 사례 모델 에서 언급 한 CCTextureCache, CCSprite FrameCache, CCAnimationCache 와 CCShaderCache 류 입 니 다.
이 관리자 들 은 일반적으로 하나의 예 로 설계 된다.
왜 관리자 류 는 하나의 사례 로 설계 해 야 합 니까?관리 자 는 일반적으로 key - value 형식 으로 다른 종류의 인 스 턴 스 를 관리 하기 때문에 관리자 의 인 스 턴 스 를 가 져 올 때마다 유일한 키 문자열 만 제공 하면 이에 대응 하 는 유일한 인 스 턴 스 를 얻 을 수 있 습 니 다.여러 관리자 의 인 스 턴 스 가 존재 할 수 있다 면 모든 관리 자 는 각자 의 key - value pairs 를 유지 합 니 다.이렇게 하면 분명히 키 문자열 을 통 해 유일한 대상 의 실례 를 얻 을 수 없다.
CCSprite FrameCache 류 는 맞 춤 형 plist 파일 을 통 해 일련의 관련 CCSprite Frame 인 스 턴 스 를 예화 한 다음 에 요정 프레임 의 이름 만 제공 하면 해당 하 는 CCSprite Frame 인 스 턴 스 를 얻 을 수 있 습 니 다.이런 의미 에서 볼 때 CCSprite FrameCache 류 도 하나의 공장 류 라 고 할 수 있 고 CCSprite Frame 인 스 턴 스 를 전문 적 으로 생산 한다.또한 엘 프 프레임 의 이름 이 같다 면 가 져 온 엘 프 프레임 의 인 스 턴 스 도 같 습 니 다.
2. 관리자 모드 를 사용 하 는 장단 점.
장점: 관련 대상 에 게 통 일 된 전역 접근 점 을 제공 하 는 동시에 간결 한 인 터 페 이 스 를 제공 하여 이 대상 을 가 져 오고 조작 할 수 있 습 니 다.또한 이 모드 를 사용 하여 게임 에서 자주 사용 하 는 자원 을 캐 시 하면 게임 이 실 행 될 때의 성능 을 향상 시 킬 수 있 습 니 다.
단점: 관리자 들 이 대부분이 단일 모델 을 사용 하기 때문에 단일 모델 의 모든 단점 을 계승 하여 더 이상 군말 하지 않 겠 습 니 다.
3. 관리자 모드 의 정의
관리자 클래스 (cache 클래스) 는 다시 사용 할 수 있 는 자원 (예 를 들 어 글꼴, 무늬, 엘 프 프레임 등) 의 생 성 과 관 리 를 간소화 할 수 있 습 니 다.관리자 모델 은 사실 혼합 모델 로 단일 모델, 외관 모델 과 공장 모델 을 종합 했다.이 모델 은 게임 개발 에서 흔히 볼 수 있 고 게임 의 운행 성능 을 향상 시 켜 야 하 는 장소 에서 이 모델 을 활용 했다.
이 모드 의 동기: 관련 대상 의 실례 화 와 접근 을 관리 하기 위해 통 일 된 인 터 페 이 스 를 제공 합 니 다.
그것 의 일반적인 실현 은 다음 과 같다.
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
class TestManager{ public:  static TestManager *sharedTestManager(){  if (NULL == m_psManager) {  m_psManager = new TestManager;  instanceTable = CCDictionary::create();  instanceTable->retain();  }  return m_psManager;  }  void purge(){  CC_SAFE_DELETE(m_psManager);  CC_SAFE_RELEASE_NULL(instanceTable);  }  void registeInstance(const string& key,CCObject *obj){  instanceTable->setObject(ojb,key);  }  CCObject* getInstance(const string& key){  return instanceTable->objectForKey(key);  } private:  static TestManager* m_psManager;  CCDictionary *instanceTable; //             }; TestManager* TestManager::m_psManager = NULL; 

4. 게임 개발 에서 이 모델 을 어떻게 활용 할 것 인가
cocos2dx 게임 개발 에 있어 서 자주 CCAnimate 동작 으로 애니메이션 을 재생 해 야 합 니 다. 이런 동작 들 은 생 성 할 때 비용 이 많이 듭 니 다. 일반적으로 사용 하 는 방식 은 node 의 init 방법 에서 만 든 다음 에 retain 입 니 다.이후 사용 해 야 할 때 이 동작 을 직접 인용 하면 됩 니 다. 전 제 는 많은 CCAnimate 대상 의 약 한 인용 을 밝 혀 야 한 다 는 것 입 니 다.여기 서 우 리 는 이 애니메이션 동작 인 스 턴 스 를 관리 하기 위해 CCAnimateCache 류 를 만 들 수 있 습 니 다.이렇게 하면 게임 에서 상 태 를 자주 바 꾸 려 면 서로 다른 애니메이션 을 교체 해 야 할 때 이 CCAniamteCache 류 에서 해당 하 는 애니메이션 인용 을 얻 을 수 있 고 편리 하 며 게임 성능 도 향상 시 킬 수 있다.이에 따라 Action 에 해당 하 는 클래스 를 만 들 수도 있 습 니 다.
인용: 그 대상 들 이 운행 할 때 창설 하 는 시간 이 특히 많 을 때, 자주 중복 사용 할 때, 이 모드 를 사용 하여 운행 시의 성능 을 향상 시 킬 수 있다.
5. 이 모델 은 자주 단일 모델 과 결합 하여 사용 하 는데 그의 일부 디자인 사상 도 외관 모델 과 공장 모델 을 결합 시 켰 다.

좋은 웹페이지 즐겨찾기