单例模式是一种比较常用的设计模式,在很多框架中可以看到它的身影。通过单例模式可以确保类只有一个实例化,从而方便对实例个数的控制并节约系统资源。

<?phpuse \Exception;class Singleton
{/*** 对象实例* @var object/public static $instance;/*** 获取实例化对象/public static function getInstance(){if (!self::$instance instanceof self) {self::$instance = new self();}return self::$instance;}/*** 禁止对象直接在外部实例/private function __construct(){}/*** 防止克隆操作/final public function __clone(){throw new Exception('Clone is not allowed !');}
}

一个系统中可能会多次使用到单例模式,为了更加方便的创建,可以试着建立一个通用的抽象:

// SingletonFacotry.php
<?phpuse \Exception;abstract class SingletonFacotry
{/*** 对象实例数组* @var array/protected static $instance = [];/*** 获取实例化对象/public static function getInstance(){$callClass = static::getInstanceAccessor();if (!array_key_exists($callClass, self::$instance)) {self::$instance[$callClass] = new $callClass();}return self::$instance[$callClass];}abstract protected static function getInstanceAccessor();/*** 禁止对象直接在外部实例/protected function __construct(){}   /*** 防止克隆操作/final public function __clone(){throw new Exception('Clone is not allowed !');}
}
// A.php
<?phpclass A extends SingletonFactory
{public $num = 0;protected static function getInstanceAccessor(){return A::class;}
}$obj1 = A::getInstance();
$obj1->num++;
var_dump($obj1->num); // 1
$obj2 = A::getInstance();
$obj2->num++;
var_dump($obj2->num); // 2

PHP设计模式-单例模式相关推荐

  1. Python设计模式-单例模式

    Python设计模式-单例模式 基于Python3.5.2,代码如下 #coding:utf-8 import threading import timeclass Singleton(object) ...

  2. Android设计模式——单例模式(Singleton)

    二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元 ...

  3. 【学习笔记】ABAP OOD设计模式 - 单例模式

    ABAP OOD设计模式 - 单例模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 单例模式(Singleton Pattern)是常用的且较为简单的软件设计模式 ...

  4. Go 语言实现 23 种设计模式 单例模式

    Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式,在使用过程中,单例对象的类只有一个实例.使用单例模式,1 可以节省内存等资源,例如windows操作系统的资源管 ...

  5. java singleton inner class_Java面向对象设计模式-单例模式

    Java面向对象设计模式-单例模式 2020-05-28 589 0 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点,有多重实现方式. 一.饿汉式单例模式,构造方法私有化,在加载类Sin ...

  6. Java开发中常用的设计模式-单例模式

    单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. Java开发中常用的设计模式-单例模式 单例模式有3个特点: 单例类只有一个实例对象: 该单例对象必须 ...

  7. 炒冷饭系列:设计模式 单例模式

    2019独角兽企业重金招聘Python工程师标准>>> 炒冷饭系列:设计模式 单例模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆 ...

  8. 设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例

    场景 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例: 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例_霸道流氓气质的博客- ...

  9. 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

    创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...

  10. 小视频源码,设计模式单例模式

    小视频源码,设计模式单例模式实现的相关代码 .一,单线程时候推荐 /*** Created by Shinelon on 2018/10/11.* 单利模式 懒汉式 -->单线程推荐使用*/pu ...

最新文章

  1. QIIME 2用户文档. 3老司机上路指南(2019.7)
  2. 32岁!清华大学博导,国家优秀青年科学基金获得者!
  3. python【力扣LeetCode算法题库】543-二叉树的直径
  4. 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
  5. 《当程序员的那些狗日日子》(三十三)昙花一现
  6. Nginx优化与防盗链(隐藏版本号、配置缓存时间、日志分割、修改进程数、配置连接超时、使用gzip压缩页面、防盗链设置,fpm优化)
  7. Karrigell 入门教程
  8. OpenJudge NOI 1.5 16:买房子
  9. 实用的网站***步骤
  10. C++ Primer Plus 读书笔记(第8、9章)
  11. 阿里云对象存储OSS费用内容的说明
  12. spring security +oauth2(授权服务和资源服务分离) 解决getPrincipal只返回用户名的问题
  13. python 修图_拿到一张图怎么后期才能更好一点啊?告诉你具体的修图思路
  14. 深度精简版操作系统下IIS的安装方法
  15. DNS基础知识以及golang实现的简单DNS服务器
  16. 教师基本功训练计算机,教师教学基本功培训方案
  17. [新华三-H3C]ppp实验
  18. 山东畜牧兽医职业学院计算机考试,山东畜牧兽医职业学院计算机自编word15套试题11Word模拟试题(1-15)...
  19. 华硕ZX53VD笔记本的机械硬盘换成固态硬盘
  20. 用js获取ios时间戳,结果为NaN或不显示

热门文章

  1. 【剑指offer-Java版】13O(1)时间删除链表结点
  2. 教你如何 构建基本的用户控件
  3. sql语句中 时间数值转换为时间格式函数
  4. python伪造邮件发件地址_python写一个邮箱伪造脚本
  5. Codeforces Round 263(Div. 2)
  6. NLayerAppV3-Distributed Service Layer(分布式服务层)
  7. Java锁优化思路及JVM实现
  8. java的异常与记录日志
  9. JSP生成word文件
  10. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)