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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
smarty实例教程
Nov 19 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
PHP微信H5支付开发实例
Jul 25 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防注入及开发安全详细解析
2013/08/09 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
Python中处理unchecked未捕获异常实例
2015/01/17 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
python实现矩阵乘法的方法
2015/06/28 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python与R语言的简要对比
2017/11/14 Python
Python中实现输入一个整数的案例
2020/05/03 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
巡警年度自我鉴定
2014/02/21 职场文书
房屋出租协议书
2014/04/10 职场文书
签约仪式策划方案
2014/06/02 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
客房部经理岗位职责
2015/02/02 职场文书
文言文辞职信
2015/02/28 职场文书
小学班主任心得体会
2016/01/07 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle