单例模式:就是一个类一个实例。
直接上代码(c++版):
/**
* name:单例模式
* define:一个类只有一个实例
* time:15/8/9 20:00
*/
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton()
{
}
static Singleton* instance;
public:
static Singleton* getInstance()
{
if(instance == NULL)
{
//cout << "我是唯一的Singleton" << endl;
instance = new Singleton();
}
return instance;
}
void say()
{
cout << "我是唯一的" << endl;
}
};
Singleton* Singleton::instance = 0; //注意这个地方,别写掉了
int main()
{
Singleton * singleton = Singleton::getInstance();
singleton->say();
return 0;
}
这里面要注意的地方
Singleton* Singleton::instance = 0;
把类的静态变量在累的外面重新定义一下,我也不知道为什么— 。—,之前没写一直报错。
特别注意:
单线程的时候这样写是一个实例,当多线程的时候就有可能是多个实例了。我查了一下啊,用Lock() 和~Lock() 可以解决的,这里我就不说了。
PHP是单线程的。
一个私有的 静态的 构造方法;(确保用户无法通过创建对象对其进行实例化)
上个php版的。
<?php
class singleTon{
//用于保存仅有的一个实例化对象
private static $Instance=NULL;
//构造方法 使用private 封装后 则只能在类的内部使用new去创建对象
private static __construct(){};
//只有通过这个方法才能返回本类中的对象,该方法是静态方法 用类名调用
public static getInstance(){
if(self::$Instance==NULL){ //如果本类中的$Instance为空,说明还没有被实例化过
self::$Instance=new singleTon(); //实例化本对象
}
return self::$Instance;
}
public function query($sql){
echo $sql
}
}
$instance=singleTon::getInstance(); //只能使用静态方法getInstance()去获取singleTon类的对象
$instance->query("********");