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 22 PHP
有关php运算符的知识大全
Nov 03 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
php使用百度天气接口示例
Apr 22 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
PHP crc32()函数讲解
Feb 14 PHP
php用户名的密码加密更安全的方法
Jun 21 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
php4的彩蛋
2006/10/09 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
javascript轮播图算法
2016/10/21 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
Python向日志输出中添加上下文信息
2017/05/24 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
部队领导证婚词
2014/01/12 职场文书
校庆标语集锦
2014/06/25 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
求职自我评价范文
2015/03/09 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
2015迎新晚会开场白
2015/07/17 职场文书