学习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生成xml简单实例代码
Dec 16 PHP
PHP的异常处理类Exception的使用及说明
Jun 13 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
laravel 自定义常量的两种方案
Oct 14 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中Object对象的笔记分享
2011/06/28 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
PHP速成大法
2015/01/30 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
详解vue高级特性
2020/06/09 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
详解Python的三种可变参数
2019/05/08 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
中专毕业生自我鉴定
2014/02/02 职场文书
团代会宣传工作方案
2014/05/08 职场文书
企业年度评优方案
2014/06/02 职场文书
村安全生产责任书
2014/08/25 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
2014年化验室工作总结
2014/11/21 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
python pyhs2 的安装操作
2021/04/07 Python
vue+springboot实现登录验证码
2021/05/27 Vue.js