一、设计模式
我了解过一些设计模式,它们有单例模式、简单工厂模式、抽象工厂模式、策略模式、观察者模式、组合模式,至于还有其他诸如装饰、代理、建造者、责任链等,受限于编程经验,都只听说过名字。
其中单例模式和工厂模式在我的印象中应该是C++项目中比较常见的设计模式了,我自己也经常在项目里用到。观察者模式我也用过一点,就是在编写一个基于Windows的GUI框架时,将自己封装的窗口类作为观察者,维护一个被观察者容器,各种属于窗口的节点类(如按钮类)作为被观察者可接收通知。
二、设计模式举例:单例模式
就稍微多说说单例模式吧,单例模式就非常常见了,其实现也比较简单。按我自己的理解来说就是构建一个只能存在一个实例的类,比如在cocos2dx源码中的Director类:
//CCDirector.h部分代码
class CC_DLL Director : public Ref
{
public:
static Director* getInstance();
Director();
~Director();
bool init();
/*
此处省略许多声明
*/
};
//CCDirector.cpp部分代码
static Director *s_SharedDirector = nullptr;
Director* Director::getInstance()
{
if (!s_SharedDirector)
{
s_SharedDirector = new (std::nothrow) Director;
CCASSERT(s_SharedDirector, "FATAL: Not enough memory");
s_SharedDirector->init();
}
return s_SharedDirector;
}
Director类即导演类,cocos将游戏开发类比于拍电影,Director类作为导演具有控制全局的作用,包括控制整个游戏的流程即开始、继续、暂停等。但导演只能有一个,因此,这就需要用到单例模式,用户通过getInstance接口获取导演的唯一实例指针。单例模式分为懒汉模式和饿汉模式,以上代码需要第一次调用getInstance后指针s_SharedDirector才会被初始化,属于懒汉模式,至于两者的区别就不谈啦。
三、学习设计模式的意义
按照我个人的理解,设计模式是软件项目架构的利器,是学习面向对象程序设计的必要环节。设计模式也是面试时被考察的重点。在初学阶段,我觉得了解两三个常见的设计模式已经够了,剩下的可以在编程实践中慢慢扩展,有些设计模式在代码量足够的前提下学习之后感悟更深,收获更大。