我和王争学设计模式 |单例模式
目录
- 前言
- 定义
- 特点
- 适合场景
- 实现
- 总结
极客时间《设计模式》(王争)
PHP codes on Gitee
PHP codes on Github
前言
开始补全木桶最短的一片了,跟着王争老师学习设计模式,本人的锤子是PHP
,巧了PHP7.0
以后是支持继承、接口和抽象类的,应该也算是比较适用来学习设计模式了。在学习过程中,课程中的示例代码都是Java
的,虽然可以理解和看懂,但是由于语言特性,Java算是编译型语言,PHP
是解释型语言,使用起来还是有一些区别的,本着学习和思考优先的原则,还是尽力把老师讲的代码翻译成PHP
吧,相信23个设计模式走过一遭后,会有一个大的飞跃。
定义
单例设计模式(Singleton Design Pattern
),一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。
特点
存储的数据全局可用且唯一
适合场景
单例模式的用处从业务上来理解,有些数据在系统中只应该保存一份。
- 表示全局唯一,某些数据在系统中只能保存一份,比如配置信息类、唯一
ID
发号器 - 处理资源访问冲突、解决资源竞争,例如写日志功能,如果
new
出多个实例,同时写入一个文件,就可能造成文件中内容的覆盖
实现
概括起来,要实现一个单例,我们需要关注的点无外乎下面几个:
- 构造函数需要是
private
访问权限的,这样才能避免外部通过new
创建实例 - 成员变量要静态的(
static
),保证全局唯一 - 考虑对象创建时的线程安全问题(
PHP
暂时不用考虑) - 考虑是否支持延迟加载(
PHP
暂时不用考虑) - 考虑
getInstance()
性能是否高(是否加锁)。(PHP
暂时不用考虑)
<?php
/*** Created by PhpStorm.* User: 小水* Date: 2021-07-28* Time: 11:50*/namespace App;/*** 懒汉式* Class SingletonLazy* @package App*/
class SingletonLazy
{private static $instance;private $props = [];/*** @return SingletonLazy*/public static function getInstance(){if(!self::$instance){self::$instance = new self();}return self::$instance;}/*** @param $key* @param $value*/public function setProperty($key, $value){$this->props[$key] = $value;}/*** @param $key* @return mixed*/public function getProperty($key){return $this->props[$key];}
}
<?php
/*** Created by PhpStorm.* User: 小水* Date: 2021-07-28* Time: 11:50*/
require __DIR__.'/vendor/autoload.php';$inst1 = \App\SingletonLazy::getInstance();
$inst1->setProperty("hello","world");
echo $inst1->getProperty("hello") .PHP_EOL;
$inst2 = \App\SingletonLazy::getInstance();
echo $inst1->getProperty("hello") .PHP_EOL;
输出结果
$ php client.php
world
world
总结
其中的关键点就三点
private static $instance
public static function getInstanc()
- 使用时直接调用静态函数
SingletonLazy::getInstance()
参考
[1] 极客时间《设计模式》(王争)链接描述
[2] 《系统架构师教程 第一版》
[3] 从零使用composer初始化PSR-4项目
我和王争学设计模式 |单例模式相关推荐
- 我和王争学设计模式|原型模式
目录 定义 应用场景 示例1 示例2 题目 思路 代码 参考: 极客时间<设计模式>(王争) 定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.原型模式就是利用内存&qu ...
- 我和王争学设计模式|代理模式
目录 定义 使用场景 需求描述 方法一(接口式) 方法二(继承式) 方法三 (动态代理) 其他参考 极客时间<设计模式>(王争) 定义 为其他对象提供一种代理以控制对这个对象的访问 使用场 ...
- 我和王争学设计模式|抽象工厂
目录 定义 标准框架 产品抽象和实现 工厂抽象和实现 调用工厂制造产品 运行结果 课程中示例改写 参考 极客时间<设计模式>(王争) 定义 提供一个创建一系列相关或相互依赖对象的接口,而无 ...
- 我和王争学设计模式|建造者模式
目录 定义 适用场景 需求描述 代码示例 有趣例子 总结 极客时间<设计模式>(王争) Github Gitee 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的 ...
- 我和王争学设计模式|桥接模式
目录 定义 理解 题目 实现 其他参考 极客时间<设计模式>(王争) 定义 GoF 的<设计模式>一书中 将抽象部分与它的实现相分离,是他们可以独立变化. 其他书中 一个类存在 ...
- 我和王争学设计模式|工厂方法
目录 定义 缺点 代码示例 消除分支语句 极客时间<设计模式>(王争) Github Gitee 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使 ...
- 老王讲设计模式(三)——单例模式
单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 早晨,老王来到公司,发现小蔡正对着电脑屏幕发呆,于是走到小蔡身后,发现小 ...
- 老王讲设计模式(八)——适配器模式
适配器模式,是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 公司的发展速度很快,一不小心,就收购了一个创业团队去做细分市场.这么一个改变,对于公司来说 ...
- 老王讲设计模式(一)——策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 老王最近接到一个工作,上 ...
最新文章
- 1.3.8 excel for mysql_实时生成并下载大数据量的EXCEL文件,用PHP如何实现
- 4个月原生weex混合开发终结()
- OSPF的LSA类型 ——连载一路由器LSA
- OpenGL pipeline (very important)
- C++ STL里的排序去重函数 超级方便
- NAS与SAN架构:如何比较这两个存储系统
- java word转pdf jacob_java使用jacob.jar将word转pdf
- 背景减法——自组织算法
- 在win7命令行使用ssh通过秘钥登录linux
- Cortex-M0和Cortex-M0+的异常类型
- 408复习策略(强化阶段)
- cuda 的driver API 和 runtime API
- Spring AOP编程官方文档解读之操作Advised对象
- 《软技能—代码之外的生存指南》读书笔记之二:自我营销
- 传统企业:转型互联网,机遇大,挑战也大
- 《AngularJS深度剖析与最佳实践》一2.11 消息
- 《费马大定理》个人笔记整理
- 初学Python之华氏摄氏温度转换
- Java常见的线程安全工具容器类(待完善)
- 苹果iphone 6s手机测评
热门文章
- 社区教育计算机培训材料,远程教育在社区教育培训中的实效性
- 华为带火落后的增程式技术,吓得传统汽车企业瑟瑟发抖
- 加来道雄 基因编辑 纳米机器人_纳米机器人
- 计算机视觉(本科课程) 北京邮电大学 鲁鹏
- webrtc流媒体转发服务器
- jaxb xsd java_jaxb 这个资料,可以吧后缀为.xsd的文件,转化成java类使用, 方法在 里面有详细的说 Develop 238万源代码下载- www.pudn.com...
- 李国杰院士:AI创业公司如何摆脱被收购的命运「附雷克世界专访」
- 中国苏打石灰玻璃行业市场供需与战略研究报告
- R语言导入数据文件(数据导入、加载、读取)、导入csv、excel、sav、por、dat、sas7bdat格式文件
- oracle导出导入工具expdp/impdp