单例模式(Singleton) | 创建型 | PHP 设计模式系列


本站和网页 https://xueyuanjun.com/post/2599.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

单例模式(Singleton) | 创建型 | PHP 设计模式系列
Laravel 学院
文档
Laravel 8.x 中文文档
Laravel 7.x 中文文档
Laravel 6.x 中文文档
Laravel 5.8 中文文档
Laravel 5.7 中文文档
Laravel 5.6 中文文档
Laravel 5.5 中文文档
Laravel 5.4 中文文档
Laravel 5.3 中文文档
Laravel 5.2 中文文档
Laravel 5.1 中文文档
Lumen 中文文档
全栈教程
PHP 全栈工程师指南
PHP 入门到实战
Laravel 入门到精通
Vue.js 入门到实战
玩转 PhpStorm 教程
Laravel 博客入门项目
Laravel 微信小程序项目
Laravel 前后端分离项目
Swoole 入门到实战
Eloquent 性能优化实战
Redis 高性能实战系列
Laravel 新版本特性
PHP 新特性与最佳实践
Golang
Go 入门教程
Go Web 编程
Gin 使用教程
微服务开发
内功修炼
数据结构与算法
网络协议
微服务从入门到实践
高性能 MySQL 实战
高性能 Redis 实战
Laravel 消息队列实战
Laravel 从学徒到工匠
PHP 设计模式系列
名企面试指南
资源库
Laravel 资源大全
Laravel 开源项目
Laravel 扩展包
Laravel 资源下载
更多
博客 & 新闻
问答 & 讨论
Leetcode 题解
学院君读书笔记系列
关于 Laravel 学院
Laravel 互助学习群
Golang 互助学习群
更多
Laravel 中文文档
Laravel 全栈教程
Laravel 学习路径
Go 入门教程
程序员内功修炼
博客
问答
搜索
注册
登录
Info
Content
章节导航
PHP 设计模式系列
概述及目录索引
创建型
9篇文章
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
工厂方法模式(Factory Method)
多例模式(Multiton)
对象池模式(Object Pool)
原型模式(Prototype)
单例模式(Singleton)
简单工厂模式(Simple Factory)
静态工厂模式(Static Factory)
结构型
10篇文章
注册模式(Registry)
流接口模式(Fluent Interface)
适配器模式(Adapter / Wrapper)
桥梁模式(Bridge)
组合模式(Composite)
数据映射模式(Data Mapper)
装饰器模式(Decorator)
依赖注入模式(Dependency Injection)
门面模式(Facade)
代理模式(Proxy)
行为型
12篇文章
状态模式(State)
责任链模式(Chain Of Responsibilities)
命令模式(Command)
迭代器模式(Iterator)
中介者模式(Mediator)
备忘录模式(Memento)
空对象模式(Null Object)
观察者模式(Observer)
规格模式(Specification)
策略模式( Strategy)
模板方法模式(Template Method)
访问者模式(Visitor)
其它
5篇文章
委托模式( Delegation)
资源库模式(Repository)
在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
Laravel 中管道设计模式的使用 —— 中间件实现原理探究
服务定位器模式(Service Locator)
图书
PHP 设计模式系列
创建型
单例模式(Singleton)
单例模式(Singleton)
由 学院君 创建于7年前, 最后更新于 3年前
版本号 #1
27433 views
8 likes
1 collects
1、模式定义
简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。
常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。
2、UML类图
3、示例代码
Singleton.php
<?php
namespace DesignPatterns\Creational\Singleton;
/**
* Singleton类
*/
class Singleton
/**
* @var Singleton reference to singleton instance
*/
private static $instance;
/**
* 通过延迟加载(用到时才加载)获取实例
* @return self
*/
public static function getInstance()
if (null === static::$instance) {
static::$instance = new static;
return static::$instance;
/**
* 构造函数私有,不允许在外部实例化
*/
private function __construct()
/**
* 防止对象实例被克隆
* @return void
*/
private function __clone()
/**
* 防止被反序列化
* @return void
*/
private function __wakeup()
4、测试代码
Tests/SingletonTest.php
<?php
namespace DesignPatterns\Creational\Singleton\Tests;
use DesignPatterns\Creational\Singleton\Singleton;
/**
* SingletonTest用于测试单例模式
*/
class SingletonTest extends \PHPUnit_Framework_TestCase
public function testUniqueness()
$firstCall = Singleton::getInstance();
$this->assertInstanceOf('DesignPatterns\Creational\Singleton\Singleton', $firstCall);
$secondCall = Singleton::getInstance();
$this->assertSame($firstCall, $secondCall);
public function testNoConstructor()
$obj = Singleton::getInstance();
$refl = new \ReflectionObject($obj);
$meth = $refl->getMethod('__construct');
$this->assertTrue($meth->isPrivate());
PHP
设计模式
单例模式
Singleton
点赞
取消点赞
收藏
取消收藏
赞赏
分享到以下平台:
<< 上一篇:
原型模式(Prototype)
>> 下一篇:
简单工厂模式(Simple Factory)
12 条评论
#11
子房
评论于 4年前
正在删除评论...
有错误,这句应该是static::$instance = new self;
#12
lhk001
评论于 2年前
正在删除评论...
其他站上说单例模式被公认为是 反面模式,这个要怎么理解?也就是现在设计模式中不再使用单例模式了?
&lsaquo;
&rsaquo;
登录后即可添加评论
升级为学院君订阅用户(新年优惠🎁)
内容导航
1、模式定义
2、UML类图
3、示例代码
Singleton.php
4、测试代码
相关推荐
概述及目录索引
PHP 设计模式系列
多例模式(Multiton)
PHP 设计模式系列
创建型
中介者模式(Mediator)
PHP 设计模式系列
行为型
状态模式(State)
PHP 设计模式系列
行为型
委托模式( Delegation)
PHP 设计模式系列
其它
回到顶部
2022 基于 Laravel 6 构建
关于学院
订阅服务
友情链接
站点地图
本站 CDN 加速服务由又拍云赞助