cocos2d-x中设计模式
1>:单例
2>:二段构建模式
CCSprite* CCSprite::create(const char *pszFileName)
{
CCSprite *pobSprite = new CCSprite(); //1.第一阶段,分配内存
if (pobSprite && pobSprite->initWithFile(pszFileName)) //2.第二阶段,初始化
{
pobSprite->autorelease(); //!!!额外做了内存管理的工作。
return pobSprite;
}
CC_SAFE_DELETE(pobSprite);
return NULL;
}
如上面代码中的注释所示,创建一个sprite明显被分为两个步骤:1.使用new来创建内存;2.使用initXXX方法来完成初始化。
3>:管理者模式
就是专门负责管理其它类的实例的类,比如CCTextureCache, CCSpriteFrameCache,理者一般被设计成单例类,为什么管理者类要设计成单例呢?因为管理者一般会采用key-value的形式来管理其它类的实例,每当需要获取一个管理者中的实例时,只需要提供一个惟一的键值字符串就可以得到一个与之对应的惟一实例。
但凡那些对象,在运行时创建的时间开销特别大时,而又要经常重复使用时,都可以采取此模式来提高运行时性能。
4>:外观模式
把子系统现有的类进行组合来完成一些常用的任务,简化客户程序的使用。子系统对于外观类是不知情的,即子系统不会包含外观类的指针。
Cocos2d-x里面有一个非常明显的地方使用了外观模式,它就是SimpleAudioEngine。因为它为CocosDenshion这个子系统的一组接口提供了一个一致的界面,同时定义了一个高层接口,方便客户使用该子系统。
5>:观察者模式
CCNotificationCenter类是观察者模式中的目标对象,而CCNotificationObserver则是观察者。一个目标对象可以注册多个观察者,当目标对象的状态改变的时候,可以通知观察者对象作出相应的响应。CCNotificationCenter不是通过自身状态改变来通知观察者,而是通过显式地发送观察者感兴趣的消息(postNotification)来通知它们。每一种消息类型可以对应多个观察者,同时,每一个观察者也可以“观察”多个消息类型。
一个model可以对应多个views,model就是目标对象,而view则是观察者,当model改变的时候,要通知所有的view也相应的改变。