学习php设计模式 php实现单例模式(singleton)


Posted in PHP onDecember 07, 2015

保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
单例模式有三个特点:
1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向整个系统提供这个实例
一、单例模式结构图

学习php设计模式 php实现单例模式(singleton)

二、单例模式中主要角色
Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。
三、单例模式的优点
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活
四、单例模式适用场景
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
五、单例模式与其它模式】
工厂方法模式(factory method模式):单例模式使用工厂模式来提供自己的实例。
抽象工厂模式(abstract factory模式):抽象工厂模式可以使用单例模式,将具体工厂类设计成单例类。
建造者模式(Builder模式):建造模式可以将具体建造类设计成单例模式。
五、单例模式PHP示例

<?php
/**
 * 懒汉式单例类
 */
class Singleton {
 
 /**
  * 静态成品变量 保存全局实例
  */
 private static $_instance = NULL;
 
 /**
  * 私有化默认构造方法,保证外界无法直接实例化
  */
 private function __construct() {
 }
 
 /**
  * 静态工厂方法,返还此类的唯一实例
  */
 public static function getInstance() {
  if (is_null(self::$_instance)) {
   self::$_instance = new Singleton();
  }
 
  return self::$_instance;
 }
 
 /**
  * 防止用户克隆实例
  */
 public function __clone(){
  die('Clone is not allowed.' . E_USER_ERROR);
 }
 
 /**
  * 测试用方法
  */
 public function test() {
  echo 'Singleton Test!';
 }
 
}
 
/**
 * 客户端
 */
class Client {
 
  /**
  * Main program.
  */
 public static function main() {
  $instance = Singleton::getInstance();
  $instance->test();
 }
}
 
Client::main();
?>

以上就是使用php实现单例模式的代码,还有一些关于单例模式的概念区分,希望对大家的学习有所帮助。

PHP 相关文章推荐
浅析PHP水印技术
Feb 14 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
教大家制作简单的php日历
Nov 17 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 #PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 #PHP
PHP函数func_num_args用法实例分析
Dec 07 #PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 #PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 #PHP
学习php设计模式 php实现建造者模式
Dec 07 #PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 #PHP
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
js完美的div拖拽实例代码
2014/01/22 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
Python timeit模块原理及使用方法
2020/10/10 Python
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
《灯光》教学反思
2014/02/08 职场文书
平安工地汇报材料
2014/08/19 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python