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中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
php封装的验证码类分享
Feb 26 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
PHP7新功能总结
Apr 14 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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获取随机数组列表的方法
2014/11/13 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
Python 处理数据的实例详解
2017/08/10 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
Django 全局的static和templates的使用详解
2019/07/19 Python
python之yield和Generator深入解析
2019/09/18 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
.net软件工程师面试题
2015/03/31 面试题
初级会计求职信范文
2014/02/15 职场文书
记账会计岗位职责
2014/06/16 职场文书
北京奥运会口号
2014/06/21 职场文书
联谊活动总结范文
2015/05/09 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server
用JS实现飞机大战小游戏
2021/06/09 Javascript