php 单例模式 序列化,php设计模式(二)单例模式
应用场景:
数据库连接这种比较耗费资源的操作;
我们希望整个应用只实例化一个;
结构:
4私1公;
私有化构造方法: 防止使用 new 创建多个实例;
私有化克隆方法: 防止 clone 多个实例;
私有化重建方法: 防止反序列化
私有化静态属性: 防止直接访问存储实例的属性
示例<?php
namespace Baijunyao\DesignPatterns\Singleton;
/**
* 普通类
*
* Class Db1
* @package Baijunyao\DesignPatterns\Singleton
*/
class Db1
{
public static $instance = null;
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
public function __construct()
{
}
public function __clone()
{
}
public function __wakeup()
{
}
}
$db1 = new Db1();
$db2 = new Db1();
$db3 = clone $db2;
$db4 = Db1::getInstance();
$db5 = unserialize(serialize($db4));
var_dump($db1);
echo '
';
var_dump($db2);
echo '
';
var_dump($db3);
echo '
';
var_dump($db4);
echo '
';
var_dump($db5);
echo '
';
/**
* 单例
*
* Class Db2
* @package Baijunyao\DesignPatterns\Singleton
*/
class Db2
{
private static $instance = null;
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
/**
* 防止使用 new 创建多个实例
*
* Db2 constructor.
*/
private function __construct()
{
}
/**
* 防止 clone 多个实例
*/
private function __clone()
{
}
/**
* 防止反序列化
*/
private function __wakeup()
{
}
}
$db6 = Db2::getInstance();
$db7 = Db2::getInstance();
var_dump($db6);
echo '
';
var_dump($db7);
echo '
';
github:https://github.com/baijunyao/design-patterns/tree/master/singleton
运行代码我们可以看到;
普通类DB1的句柄每个都是不一样的;
一共5个实例;
而单例这两个的句柄都是 27 ;
一直是一个实例;
php 单例模式 序列化,php设计模式(二)单例模式相关推荐
- Java设计模式(二) -- 单例模式
单例模式是Java中最广泛应用的设计模式之一,为创建对象提供了一种绝佳的方式.因此,在一些Java程序中, 一些管理器和控制器经常被设计为单例模式. 这种模式涉及到一个单一的类,该类负责创建自己的对象 ...
- php单例模式代码,php设计模式之单例模式代码
/** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for sin ...
- java单例模式实例_Java设计模式之单例模式 通俗易懂 超详细 【内含案例】
单例模式 什么是单例模式 ? 确保程序中一个类只能被实例化一次,实现这种功能就叫单例模式 单例模式的好处是什么 ? 方便控制对象 节省资源减少浪费 怎么实现单例模式 ? 构造私有化 调用静态方法返回实 ...
- 从王者荣耀看设计模式(二.单例模式)
从王者荣耀看设计模式(单例模式) 一:简介 多个英雄可同时攻击敌方水晶,当水晶血条小于0,游戏结束 二:单例模式 一个类有且仅有一个实例,并且自行实例化向整个系统提供(水晶). 这其中的设计原则有: ...
- java单例设计模式_Java设计模式之单例模式详解
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...
- 设计模式之--单例模式
序言 今天,我会来详细的讲解二十三种设计模式中最常见的设计模式--单例模式,包括单例模式的特点,应用常见,单例模式使用的好处,以及单例模式实现的方式,以及每个方式之间的优缺点等. 好了,话不多说了,让 ...
- 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)
设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...
- 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...
- Java设计模式之单例模式的学习
本篇是本人的第二篇博客 旨在记录本人对于Java设计模式之单例模式的学习和理解,也希望本篇可以对一些正在学习的小伙伴起到一些帮助 单例模式(singleton)的特点: 1.单例模式有且仅有一个实例: ...
最新文章
- 《本人娶刘亦菲的可行性报告》原文
- mirc635.rar
- 解决多个pts/*在线登录问题
- CSS3无前缀脚本prefixfree.js及Animatable介绍
- __doPostBack简单的使用方法
- 头条面试题:请谈谈Redis 9种数据结构以及它们的内部编码实现
- ubuntu16.04下安装mysql详细步骤
- 阿里技术专家:进击的 Java ,云原生时代的蜕变
- numpy版本过高的解决方案
- 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜
- 【bzoj2118】 墨墨的等式
- python交换模式、vim模式TAB自动补齐
- 对流式计算模型的理解
- 清华大学计算机考研资料汇总
- c语言erfc函数,erf、erff、erfl、erfc、erfcf、erfcl
- 如何看懂congestion map
- iMazing2021mac win最先进的苹果iPhone和iPad管理软件
- 【互动媒体习作】创意编程作业——导航
- LightWave 3D 2019 for Mac(三维动画制作软件)
- display: flex以及flex-direction,justify-content,align-items
热门文章
- Leetcode 24. Swap Nodes in Pairs
- 令人作呕的OpenSSL
- 百度地图2.1获取密钥配置的Android签名证书的sha1值
- Javascript 中的 Function对象
- Struts编程心得
- Eclipse反编译插件: Jodeclipse与JadClipse
- 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
- C++中list的使用方法及常用list操作总结
- mysql55w.x86 64 卸载_Cent6.5 64位yum安装mysql5.5
- Java使用jfreechart画饼图_jfreechart应用_例题_生成饼状图(展示,生成文件,WEB项目)_可以直接运行...