学习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的网址
Nov 25 PHP
php代码把全角数字转为半角数字
Dec 10 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
php数组去除空值函数分享
Feb 02 PHP
详解YII关联查询
Jan 10 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 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 MYSQL 数据备份类
2009/06/19 PHP
解析php中的escape函数
2013/06/29 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
PHP中overload与override的区别
2017/02/13 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
js实现微信聊天效果
2020/08/09 Javascript
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
计算机专业推荐信范文
2013/11/27 职场文书
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
自我介绍演讲稿
2014/01/15 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
二年级作文之动物作文
2019/11/13 职场文书
python字符串常规操作大全
2021/05/02 Python