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 采集程序 常用函数
Dec 18 PHP
PHP mkdir()定义和用法
Jan 14 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
PHP源代码数组统计count分析
Aug 02 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
php支持断点续传、分块下载的类
May 02 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
PHP数组操作简单案例分析
Oct 15 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
PHP 类与构造函数解析
2017/02/06 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
js获取内联样式的方法
2015/01/27 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
函授生自我鉴定
2014/03/25 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
学雷锋倡议书
2015/01/19 职场文书
综合管理员岗位职责
2015/02/11 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
MySQL创建管理RANGE分区
2022/04/13 MySQL