设计模式之 : 单例模式
来源:互联网 发布:海康网络监控安装教程 编辑:程序博客网 时间:2024/06/17 03:08
单例模式(Singleton):用于为一个类生成一个唯一的对象。
特点:
1、一个类只能有一个实例2、它必须自行创建这个实例3、它必须自行向整个系统提供这个实例
使用场景:
单例模式一般使用在资源共享和需要控制资源的情况下:例如:购物车,回收站,数据库连接,计数器,配置文件共享等所有项目中只需要存在一个的模块,你都可以采用单例模式。
实现 :
三私一公①私有化构造方法:防止实例化②私有化克隆方法:防止克隆③私有化静态属性:保存对象④私有化静态方法:获取对象
代码实例:
<?php class Database { //数据库连接资源 protected static $_db; //单例标识符 private static $_instance = NULL; //定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化 private function __construct(){ } //外部调用的是 getInstance public static function getInstance(){ //检测类是否被实例化 if (self :: $_instance === null) { self::$_instance = new self(); self::$_db = mysql_connect('localhost','root','root'); echo '只有一次实例化'; } return self::$_instance; } public function select_db($db){ return mysql_select_db($db,self::$_db); } //定义私有的__clone()方法,确保单例类不能被复制或克隆 private function __clone(){ } } $db = Database::getInstance(); print_r($db->select_db('test')); print_r($db->select_db('test')); print_r($db->select_db('test')); //output:只有一次实例化111 ?> 通过输出(output)可以看出页面执行中,数据库类(class Database)只有第一次调用的时候是真实实例化的,剩下的调用都是直接从静态变量获取该实例的,这样的话就防止了在一次生命周期中多次连接数据库了,极大的节省了资源,这就是单例模式。
pdo类单例模式实例:http://blog.csdn.net/u013372487/article/details/52700674
注意:
单例模式的好处就在于当前进程只产生一个对象(或者叫做模块),但有一点需要指出,如果单例模式的操作对象是一个资源类型,那么此时的单例模式并不是纯粹的单例模式,因为php的生命周期仅仅是页面级别的,所以他无法像Java语言那样在内存中将这个资源类型存起来,并且我们也无法借助类似redis的nosql缓存数据库,因为资源类型(类似mysql_connect的返回值)是无法被序列化(指的是资源无法转成字符串)。即,php的单例,仅指进程中单例,不似java,在整个内存中单例,所以在PHP语言下,单例模式是有瑕疵的。
0 0
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- 关键字-分节5(signed、unsigned)
- Don't know how to iterate over supplied "items" in &lt;forEach&gt;解决办法
- MapReduce工作原理图文详解
- centos7 yum安装nginx 显示No package nginx available
- 我的项目中遇到的问题
- 设计模式之 : 单例模式
- 随记
- iOS 图片压缩策略
- java发送http的get、post请求
- 2016.10.7初中部上午NOIP普及组比赛总结
- app接口简单理解
- 互联网网站的反爬虫策略浅析
- ListView, GirldList 等setCurrentItem 不立即刷新
- Android Studio插件