不扯复杂的概念,我认为设计模式就是平时解决某一类问题时,所形成的对此类的问题的解决思路的总结,适用性较强的方法。
下面我来总结一下,实际项目中较为常见的设计模式,从易到难。
首先最简单的,但适用很广泛的设计模式:单例模式(Singleton pattern)。
使用这个模式的目的很简单,就是让一个类的对象成为项目中此类的唯一的实例,并且提供访问此对象的的唯一的一个接口。
一些简单的例子(不知道恰不恰当):
1.窗口对话框:Windows下的任务管理器以及网络共享中心,你只可能打开一个窗口,因为如果打开多份,多个窗口的内容相同,资源浪费,如果多个窗口内容不相同,那事情就更大发了(同一个时刻只可能有一个状态)。
2.保存项目配置文件信息的辅助类,一般的系统中这个类会被设置成单例模式。
3.内存池和线程池,也会被设计成单例模式。
下面我们通过一个简单的程序来看一下C++中的单例模式的设计:
class dataBaseInfo
{
private:
dataBaseInfo();
~dataBaseInfo();
public:
static dataBaseInfo* instance(void);
void setUserName(const std::string&);
std::string getUserName(void) const;
//...
private:
static dataBaseInfo* g_singleClass;
std::string m_userName;
std::string m_passWord;
std::string m_ip;
int m_port;
std::string m_InstanceName;
};
dataBaseInfo::dataBaseInfo():
m_userName(""),
m_passWord(""),
m_ip("0.0.0.0.0"),
m_port(0),
m_InstanceName("")
{
}
dataBaseInfo::~dataBaseInfo()
{
}
dataBaseInfo* dataBaseInfo::g_singleClass = NULL;
dataBaseInfo* dataBaseInfo::instance()
{
if(NULL == g_singleClass)
{
g_singleClass = new dataBaseInfo;
}
return g_singleClass;
}
void dataBaseInfo::setUserName(const std::string& name)
{
m_userName =name;
}
std::string dataBaseInfo::getUserName(void) const
{
return m_userName;
}
int main(void)
{
// 读取配置文件
std::string username("jim");
dataBaseInfo::instance()->setUserName(username);
//...
return 0;
}
上面的代码片段就是一个简单的单例模式的例子:
1.将构造函数和析构函数设置为private的目的是防止,在别的地方实例化对象。
2.类中包含一个私有的静态的实例对象的指针,指针指向全局唯一的本类的实例。
3.提供了了一个唯一访问单例的静态方法instance()。