码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2014-05-29 20:49:46      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   a   get   数据   

之前在深入PHP的书中有看过,不过不太理解,打了代码,有种模模糊糊的概念。后来去参加笔试,竟然遇到要写单例模式,后悔TM自己没好好努力学习,结果写不出来,而且也完全不懂单例是啥玩意。

现在重新看了资料,来回顾下吧。

吖的,看了网上一些资料,有些太TM费解了。

特点: 

他先将初始化函数变为私有,防止外部new类。然后提供一个公有静态getInstance()方法,返回一个实例引用(也就是这个类只能内部生成对象,注::操作符只能访问静态变量和静态函数)。

还要创建__clone方法防止对象被复制克隆。他只负责一个特定的任务。

 

应用场景:数据库链接跟全局控制配置信息

配上代码:当然是从网上抄的,只是便于理解。或许在以后自己写项目会用到,到时会有更深的理解 。

class Danli {

 

//保存类实例的静态成员变量

private static $_instance;

 

//private标记的构造方法

private function __construct(){

echo ‘This is a Constructed method;‘;

}

 

//创建__clone方法防止对象被复制克隆

public function __clone(){

trigger_error(‘Clone is not allow!‘,E_USER_ERROR);

}

 

//单例方法,用于访问实例的公共的静态方法

public static function getInstance(){

if(!(self::$_instance instanceof self)){

self::$_instance = new self;

}

return self::$_instance;

}

 

public function test(){

echo ‘调用方法成功‘;

}

 

}

 

//用new实例化private标记构造函数的类会报错

//$danli = new Danli();

 

//正确方法,用双冒号::操作符访问静态方法获取实例

$danli = Danli::getInstance();

$danli->test();

 

//复制(克隆)对象将导致一个E_USER_ERROR

$danli_clone = clone $danli; 

单例模式,布布扣,bubuko.com

单例模式

标签:c   style   class   a   get   数据   

原文地址:http://www.cnblogs.com/mykcc/p/3758221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!