学习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 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
我的论坛源代码(二)
2006/10/09 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python交互环境下实现输入代码
2018/06/22 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
社区八一活动方案
2014/02/03 职场文书
实习生评语
2014/04/26 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Java 在线考试云平台的实现
2021/11/23 Java/Android
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL