应用场景:

数据库连接这种比较耗费资源的操作;

我们希望整个应用只实例化一个;

结构:

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设计模式(二)单例模式相关推荐

  1. Java设计模式(二) -- 单例模式

    单例模式是Java中最广泛应用的设计模式之一,为创建对象提供了一种绝佳的方式.因此,在一些Java程序中, 一些管理器和控制器经常被设计为单例模式. 这种模式涉及到一个单一的类,该类负责创建自己的对象 ...

  2. php单例模式代码,php设计模式之单例模式代码

    /** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for sin ...

  3. java单例模式实例_Java设计模式之单例模式 通俗易懂 超详细 【内含案例】

    单例模式 什么是单例模式 ? 确保程序中一个类只能被实例化一次,实现这种功能就叫单例模式 单例模式的好处是什么 ? 方便控制对象 节省资源减少浪费 怎么实现单例模式 ? 构造私有化 调用静态方法返回实 ...

  4. 从王者荣耀看设计模式(二.单例模式)

    从王者荣耀看设计模式(单例模式) 一:简介 多个英雄可同时攻击敌方水晶,当水晶血条小于0,游戏结束 二:单例模式 一个类有且仅有一个实例,并且自行实例化向整个系统提供(水晶). 这其中的设计原则有: ...

  5. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  6. 设计模式之--单例模式

    序言 今天,我会来详细的讲解二十三种设计模式中最常见的设计模式--单例模式,包括单例模式的特点,应用常见,单例模式使用的好处,以及单例模式实现的方式,以及每个方式之间的优缺点等. 好了,话不多说了,让 ...

  7. 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)

    设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...

  8. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式

    系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...

  9. Java设计模式之单例模式的学习

    本篇是本人的第二篇博客 旨在记录本人对于Java设计模式之单例模式的学习和理解,也希望本篇可以对一些正在学习的小伙伴起到一些帮助 单例模式(singleton)的特点: 1.单例模式有且仅有一个实例: ...

最新文章

  1. 《本人娶刘亦菲的可行性报告》原文
  2. mirc635.rar
  3. 解决多个pts/*在线登录问题
  4. CSS3无前缀脚本prefixfree.js及Animatable介绍
  5. __doPostBack简单的使用方法
  6. 头条面试题:请谈谈Redis 9种数据结构以及它们的内部编码实现
  7. ubuntu16.04下安装mysql详细步骤
  8. 阿里技术专家:进击的 Java ,云原生时代的蜕变
  9. numpy版本过高的解决方案
  10. 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜
  11. 【bzoj2118】 墨墨的等式
  12. python交换模式、vim模式TAB自动补齐
  13. 对流式计算模型的理解
  14. 清华大学计算机考研资料汇总
  15. c语言erfc函数,erf、erff、erfl、erfc、erfcf、erfcl
  16. 如何看懂congestion map
  17. iMazing2021mac win最先进的苹果iPhone和iPad管理软件
  18. 【互动媒体习作】创意编程作业——导航
  19. LightWave 3D 2019 for Mac(三维动画制作软件)
  20. display: flex以及flex-direction,justify-content,align-items

热门文章

  1. Leetcode 24. Swap Nodes in Pairs
  2. 令人作呕的OpenSSL
  3. 百度地图2.1获取密钥配置的Android签名证书的sha1值
  4. Javascript 中的 Function对象
  5. Struts编程心得
  6. Eclipse反编译插件: Jodeclipse与JadClipse
  7. 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
  8. C++中list的使用方法及常用list操作总结
  9. mysql55w.x86 64 卸载_Cent6.5 64位yum安装mysql5.5
  10. Java使用jfreechart画饼图_jfreechart应用_例题_生成饼状图(展示,生成文件,WEB项目)_可以直接运行...