php实现设计模式中的单例模式详解


Posted in PHP onOctober 11, 2014

【概要】

保证一个类仅有一个实例,并且提供一个访问它的全局访问点【GOF95】

【特点】

1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向整个系统提供这个实例

【结构图】

php实现设计模式中的单例模式详解

【主要角色】

Singleton定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。

【优缺点】

1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活

【适用性】

1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。

【单例模式php实例】

<?php

 /**

 * 单例模式

 * -------------

 * @author   zhaoxuejie <zxj198468@gmail.com>

 * @package  design pattern 

 * @version  v1.0 2011-12-14

 */

class Singleton {

 

 //私有静态成员变量,保存全局实例

 private static $instance = NULL;

 

 //私有构造方法,保证外界无法直接实例化

 private function __construct(){}

 

 //静态方法,返回此类唯一实例

 public static function getInstance(){

  if(!isset(self::$instance)){

   $c = __CLASS__;

   self::$instance = new $c;

  }

  return self::$instance;

 }

 

 //测试用方法

 public function info(){

  return 'ok';

 }

 

 //防止克隆

 public function __clone(){

  trigger_error('Clone is not allowed.', E_USER_ERROR);

 }

}
$s = Singleton::getInstance();

echo $s->info();

?>
PHP 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
php中的MVC模式运用技巧
May 03 PHP
什么是MVC,好东西啊
May 03 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP读取xml方法介绍
Jan 12 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 #PHP
php中字符集转换iconv函数使用总结
Oct 11 #PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 #PHP
PHP中执行cmd命令的方法
Oct 11 #PHP
PHP @ at 记号的作用示例介绍
Oct 10 #PHP
php json_encode()函数返回json数据实例代码
Oct 10 #PHP
PHP中构造函数和析构函数解析
Oct 10 #PHP
You might like
php 变量定义方法
2009/06/14 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Python多线程实例教程
2014/09/06 Python
python与php实现分割文件代码
2017/03/06 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python实现简单猜单词游戏
2020/12/24 Python
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
python开发制作好看的时钟效果
2022/05/02 Python