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下关于中英数字混排的字符串分割问题
Apr 06 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP 接入支付宝即时到账功能
2016/09/18 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
汽车专业人才自我鉴定范文
2013/12/29 职场文书
毕业自我评价
2014/02/05 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
政风行风整改方案
2014/10/25 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle
Django框架中模型的用法
2022/06/10 Python