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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
PHP 彩色文字实现代码
Jun 29 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
php实现图片等比例缩放代码
Jul 23 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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 mysql索引问题
2008/06/07 PHP
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
angularJS中$apply()方法详解
2015/01/07 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
浅谈node.js 命令行工具(cli)
2018/05/10 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python实现键盘输入的实操方法
2019/07/16 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
Django中ORM的基本使用教程
2020/12/22 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android