学习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 相关文章推荐
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
php用户登录之cookie信息安全分析
May 13 PHP
PHP编写简单的App接口
Aug 28 PHP
Linux系统中为php添加pcntl扩展
Aug 28 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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 mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
Node.js Buffer用法解读
2018/05/18 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
python实现按任意键继续执行程序
2016/12/30 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
出纳试用期自我鉴定范文
2014/09/16 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
2014年个人委托书范本
2014/10/13 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
开票证明
2015/06/23 职场文书
元宵节晚会主持词
2015/07/01 职场文书
关于分班的感言
2015/08/04 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
配置nginx 重定向到系统维护页面
2021/06/08 Servers
Python实现批量自动整理文件
2022/03/16 Python
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python