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 相关文章推荐
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
PHP超级全局变量数组小结
Oct 04 PHP
thinkphp 一个页面使用2次分页的实现方法
Jul 15 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
swoole锁的机制代码实例讲解
Mar 04 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
简单的php文件上传(实例)
2013/10/27 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python版微信跳一跳游戏辅助
2018/01/11 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
贷款委托书范本
2014/04/08 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python