PHP设计模式-单例模式
单例模式是一种比较常用的设计模式,在很多框架中可以看到它的身影。通过单例模式可以确保类只有一个实例化,从而方便对实例个数的控制并节约系统资源。
<?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设计模式-单例模式相关推荐
- Python设计模式-单例模式
Python设计模式-单例模式 基于Python3.5.2,代码如下 #coding:utf-8 import threading import timeclass Singleton(object) ...
- Android设计模式——单例模式(Singleton)
二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元 ...
- 【学习笔记】ABAP OOD设计模式 - 单例模式
ABAP OOD设计模式 - 单例模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 单例模式(Singleton Pattern)是常用的且较为简单的软件设计模式 ...
- Go 语言实现 23 种设计模式 单例模式
Go 语言实现 23 种设计模式 单例模式 单例模式 单例模式是一种常用的软件设计模式,在使用过程中,单例对象的类只有一个实例.使用单例模式,1 可以节省内存等资源,例如windows操作系统的资源管 ...
- java singleton inner class_Java面向对象设计模式-单例模式
Java面向对象设计模式-单例模式 2020-05-28 589 0 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点,有多重实现方式. 一.饿汉式单例模式,构造方法私有化,在加载类Sin ...
- Java开发中常用的设计模式-单例模式
单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. Java开发中常用的设计模式-单例模式 单例模式有3个特点: 单例类只有一个实例对象: 该单例对象必须 ...
- 炒冷饭系列:设计模式 单例模式
2019独角兽企业重金招聘Python工程师标准>>> 炒冷饭系列:设计模式 单例模式 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆 ...
- 设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例
场景 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例: 设计模式-单例模式-饿汉式单例模式.懒汉式单例模式.静态内部类在Java中的使用示例_霸道流氓气质的博客- ...
- 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)
创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...
- 小视频源码,设计模式单例模式
小视频源码,设计模式单例模式实现的相关代码 .一,单线程时候推荐 /*** Created by Shinelon on 2018/10/11.* 单利模式 懒汉式 -->单线程推荐使用*/pu ...
最新文章
- QIIME 2用户文档. 3老司机上路指南(2019.7)
- 32岁!清华大学博导,国家优秀青年科学基金获得者!
- python【力扣LeetCode算法题库】543-二叉树的直径
- 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
- 《当程序员的那些狗日日子》(三十三)昙花一现
- Nginx优化与防盗链(隐藏版本号、配置缓存时间、日志分割、修改进程数、配置连接超时、使用gzip压缩页面、防盗链设置,fpm优化)
- Karrigell 入门教程
- OpenJudge NOI 1.5 16:买房子
- 实用的网站***步骤
- C++ Primer Plus 读书笔记(第8、9章)
- 阿里云对象存储OSS费用内容的说明
- spring security +oauth2(授权服务和资源服务分离) 解决getPrincipal只返回用户名的问题
- python 修图_拿到一张图怎么后期才能更好一点啊?告诉你具体的修图思路
- 深度精简版操作系统下IIS的安装方法
- DNS基础知识以及golang实现的简单DNS服务器
- 教师基本功训练计算机,教师教学基本功培训方案
- [新华三-H3C]ppp实验
- 山东畜牧兽医职业学院计算机考试,山东畜牧兽医职业学院计算机自编word15套试题11Word模拟试题(1-15)...
- 华硕ZX53VD笔记本的机械硬盘换成固态硬盘
- 用js获取ios时间戳,结果为NaN或不显示