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安装攻略:常见问题解答(二)
Oct 09 PHP
小文件php+SQLite存储方案
Sep 04 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php 错误处理经验分享
Oct 11 PHP
php检测文件编码的方法示例
Apr 25 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php提供实现反射的方法和实例代码
Sep 17 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
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
在Python中表示一个对象的方法
2019/06/25 Python
python用for循环求和的方法总结
2019/07/08 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
计算机学生的自我评价分享
2014/02/18 职场文书
法律专业自荐信
2014/06/03 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
法人代表证明书格式
2014/10/01 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
小程序实现侧滑删除功能
2022/06/25 Javascript