学习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 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
简单谈谈favicon
Jun 10 PHP
PHP5.3新特性小结
Feb 14 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
Oct 16 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常用函数的使用汇总
2013/06/08 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
vue的mixins属性详解
2018/03/14 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python编写屏幕截图程序方法
2015/02/18 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python使用爬虫猜密码
2016/02/19 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
Python requests模块session代码实例
2020/04/14 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
学习三严三实心得体会
2014/10/13 职场文书
2014公司年终工作总结
2014/12/19 职场文书
公司借款担保书
2015/09/22 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python