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 相关文章推荐
header()函数使用说明
Nov 23 PHP
php中计算时间差的几种方法
Dec 31 PHP
PHP 写文本日志实现代码
May 18 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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中isset()和unset()函数的用法小结
2014/03/11 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
form自动提交实例讲解
2017/07/10 PHP
类似框架的js代码
2006/11/09 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue debug 二种方法
2018/09/16 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python实现彩票系统
2020/06/28 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
P/Invoke是什么
2015/07/31 面试题
2015年大学宣传部工作总结
2015/05/26 职场文书
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫