23种设计模式--单例模式(c++版和php版)

单例模式:就是一个类一个实例。

直接上代码(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("********");




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值