学习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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
实用函数3
Nov 08 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
浅析php单例模式
Nov 25 PHP
php从字符串创建函数的方法
Mar 16 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 PHP
PHP执行linux命令6个函数代码实例
Nov 24 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
2011/06/02 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
php实现Mysql简易操作类
2015/10/11 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
Python3实现Web网页图片下载
2016/01/28 Python
Python从零开始创建区块链
2018/03/06 Python
python实现顺序表的简单代码
2018/09/28 Python
python实现三维拟合的方法
2018/12/29 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
python数据分析:关键字提取方式
2020/02/24 Python
python实现ftp文件传输功能
2020/03/20 Python
食品营养与检测应届生求职信
2013/11/08 职场文书
前台文员的岗位职责
2013/11/14 职场文书
称象教学反思
2014/02/03 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
工程部岗位职责范本
2015/04/11 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技