学习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 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP与SQL语句常用大全
Dec 10 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 PHP
PHP7新特性
Mar 09 PHP
PHP命令行与定时任务
Apr 01 PHP
详解thinkphp的Auth类认证
May 28 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
python pdb调试方法分享
2014/01/21 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
悬挂训练绳:TRX
2017/12/14 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
如何唤起类中的一个方法
2013/11/29 面试题
电子银行营销方案
2014/02/22 职场文书
难忘的一天教学反思
2014/04/30 职场文书
机房搬迁方案
2014/05/01 职场文书
师范大学生求职信
2014/06/13 职场文书
班级读书活动总结
2014/06/30 职场文书
倡议书格式
2014/08/30 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
公司联欢会主持词
2015/07/04 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android