当前位置:首页 > 编程技术 > 正文内容

PHP 设计模式之单例模式

yc8881年前 (2023-02-06)编程技术242

PHP 设计模式之单例模式

1. 单例模式


单例:一个类最多只能有一个对象,目的:保护资源的唯一性

单例模式(Singleton):通过代码实现单例的设计思路、一个类最多只能产生一个对象的设计思想

2. 三私一公


单例模式设计规范:三私一公

  • 私有化构造方法: 禁止在类外无限实例化对象
  • 私有化克隆方法: 禁止对象无限克隆对象
  • 私有化静态属性: 保存类内部实例化得到的对象
  • 公有化静态方法: 允许外部通过调用类内部方法获取对象

a. 私有化构造方法

  1. 对象的产生方式之一是通过实例化类,而在类外部实例化是一种不可控行为,所以应该禁止类在外部被实例化
  2. 类在外部实例化本质上是在类外部调用了构造方法,
  3. 私有化构造方法可使其不能在类外部掉用构造方法,也就是实现了禁止类在外部被实例化

b. 公有静态方法

  1. 私有化构造方法只是不能在类外部实例化类,但是可以在类里面实例化,没有对象,还想要访问类中的方法,所以需要定义一个公有静态方法,用于获取类的实例(对象)

c. 私有化静态属性

  1. 提供公有静态方法后,无限调用静态方法依然可以得到多个对象。
  2. 要想只返回一个,则可将第一次产生的对象保存起来,以后如果要获取对象直接返回第一次产生的对象

d. 私有化克隆方法

  1. 在类外部可以通过克隆对象来产生新的对象,私有化克隆方法可实现禁止类在外部被克隆

3. 单例模式设计类


  1. /**
  2. * 单例模式设计
  3. */
  4. class Singleton
  5. {
  6. /**
  7. * 私有静态属性
  8. * 保存产生的对象
  9. */
  10. private static $obj;
  11. /**
  12. * 私有化构造方法
  13. * 禁止类在外部实例化
  14. */
  15. private function __construct(){}
  16. /**
  17. * 类的入口
  18. * 用于获取类的实例
  19. */
  20. public static function getInstance()
  21. {
  22. if (self::$obj instanceof self) {
  23. return self::$obj;
  24. } else {
  25. self::$obj = new self;
  26. return self::$obj;
  27. }
  28. }
  29. /**
  30. * 私有化克隆方法
  31. * 禁止类的实例在外部被克隆
  32. */
  33. private function __clone(){}
  34. }

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10494.html

标签: 软件编程
分享给朋友:

“PHP 设计模式之单例模式” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】Thymeleaf报错Error resolving template “XXX”

【说站】Thymeleaf报错Error resolving template “XXX”

修改了一下开源项目的目录结构访问突然报错Error resolving template “XXX”可能原因有如下三种:第一种可能:原因:在使用springboot的过程中,如果使用thymeleaf...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

【说站】C#在PDF中添加墨迹注释Ink Annotation的步骤详解

PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何...

【说站】使用systemctl配置dnspod-shell实现ddns

【说站】使用systemctl配置dnspod-shell实现ddns

这个是毛子路由器上用的脚本,由于碳云的nat服务器公网IP不断的变,因此只好通过ddns来稳定连接nat服务器了。顺便水一篇文章,大家新年快乐。使用前需要将域名添加到 DNSPod 中,并添加一条A记...