前段时间写程序,是当用户点击菜单的时候会弹出一个对话框,再点击的话又会弹出一个对话框,因为我的对话框是在用户点击的时候创建的,所以如果用户重复点击就会创建多个对话框,单例模式正好解决这个问题。
单例模式, singleton。
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量被一个对象访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类本省负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
思想:
构造方法写成私有函数,防止类外进行实例化,这样就需要在类的内部创建类的对象,因此需要提供一个静态函数供调用,该函数返回该类的唯一的一个实例。
代码如下: 实例只会被创建一次,所以程序输出为:
first
first
#include <iostream>
#include <string>
using namespace std;
class singleton
{
public:
static singleton & getInstance(string initStr);
string getString() const
{ return str; }
void setString(string newString)
{ str = newString; }
/*
other function member
*/
private:
singleton(string initStr); /*constructor must be private*/
string str; // data member
static singleton * singleInstance;
/*
other data member
*/
};
singleton::singleton(string initStr)
{
str = initStr;
}
singleton & singleton::getInstance(string initStr)
{
if (singleInstance == NULL)
singleInstance = new singleton(initStr);
return *singleInstance;
}
singleton * singleton::singleInstance = NULL;
int main()
{
singleton a = singleton::getInstance("first");
singleton b = singleton::getInstance("second");
cout << a.getString() << endl;
cout << b.getString() << endl;
exit(0);
}