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的session cookie错误
Aug 09 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
使用Sphinx对索引进行搜索
Jun 25 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP入门之常量简介和系统常量
May 12 PHP
PHP读取文件内容的五种方式
Dec 28 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
收集的php编写大型网站问题集
2007/03/06 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
php 问卷调查结果统计
2015/10/08 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
python中pass语句用法实例分析
2015/04/30 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
制药工程专业毕业生推荐信
2013/12/24 职场文书
学前教育求职自荐信范文
2013/12/25 职场文书
生产助理岗位职责
2014/06/18 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python