前言

设计模式是我们开发过程中的重中之重,所以今天小编就来学习设计模式中的单例模式。

单例模式

<?phpclass Singleton
{ /*** 定义一个静态变量保存已经实例化的对象* * @var self|null*/private static $_instance = null;/*** 构造函数私有,防止类可以通过 new 实例化* * @access private* @return void*/private function __construct () { }/*** 私有化复制克隆方法,防止类别复制和克隆* * @access private* @return void*/private function __clone () { }/*** 定义获取对象实例的入口,返回该实例* * @access public* @return self*/public static function getInstance () { // 判断是否已经存在实例化对象if (self::$_instance === null) { // 不存在,则进行实例化self::$_instance = new self();}return self::$_instance;}/*** 此接口用来测试单例模式 - 改变 string 的值* * @access public * @param string $string 值* @return void*/public function setString ($string) { $this->string = $string;}/*** 此接口用来测试单例模式 - 输出 string 的值* * @access public * @return void*/public function dumpString () { echo($this->string);}
}// 测试,第一次实例化
$test1 = Singleton::getInstance();
echo('这是第一次实例化<br><br>');
$test1->setString('哈咯,小罗');
$test1->dumpString();echo('<br><br><br>');// 第二次实例化
echo('这是第二次实例化<br><br>');
$test2 = Singleton::getInstance();
$test2->dumpString();echo('<br><br><br>');// test2 修改 string 的数据
$test2->setString('哈咯,小罗,我是 test2 修改的数据<br><br>');// 重新执行 test1 的打印方法,看看是否改变了数据
echo('重新执行 test1 的打印方法<br><br>');$test1->dumpString();

接下来我们查看一下执行结果:

由此我们可以看出,虽然我们实例化了两次,但两次得到的都是同一实例,如果其中一个修改了实例的成员,其它的都会被修改。

结语

  1. 对于整个程序运行过程中,使用的是同一个实例,并且需要频繁创建和销毁的对象,可以使用单例模式来减少系统的消耗;
  2. 需要注意,其中一个实例修改了其中一个变量,可能会影响到其它地方的使用;
  3. 单例模式没有抽象层,所以扩展起来很难;
  4. 如果单例对象长时间未使用,系统将会认为是垃圾,并进行自动销毁并回收资源,下次使用时,将重新实例化,这将导致单例对象数据的丢失;

单例对象会被jvm的gc时回收吗_【PHP设计模式】单例模式相关推荐

  1. 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式

    单例五种创建方式(下一篇:工厂模式) 什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 单例应用场景 1. Windows的Task Manager(任务管理器)就是很典型的单例模式( ...

  2. 【scala】类的定义和单例对象

    一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...

  3. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

  4. Scala单例对象(伴生对象)

    概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...

  5. ThreadLocal和单例对象比较

    单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量     ...

  6. 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

    文章目录 I . 单例的懒汉式与恶汉式 II . Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 ...

  7. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  8. 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

    为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了C ...

  9. android 克隆对象,克隆会破坏单例对象吗?

    假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢? 当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码. public class Conc ...

最新文章

  1. 大合集!80 篇 CVPR2020 论文分方向整理: 目标检测/图像分割/姿态估计等(附链接&下载)...
  2. jQuery 表单验证插件,jQuery Validation Engine用法详解
  3. 【科普】一文把数据科学、人工智能与机器学习讲清楚
  4. 基于Mat变换的骨架提取Java
  5. IOS自定义UITableViewCell的高亮背景色
  6. 泛联新安EDA系列——国内自主研发,首款集成双国军标的HDL代码缺陷管理平台VHawk
  7. 一行代码下载网页视频!
  8. 删库遭 GitHub 封号,开发者欲夺回发行权:“我只是犯了个编程错误”
  9. 一个用JS编写的随机抽取号码的小程序
  10. zcu106 固化_ZCU106的PYNQ移植
  11. Android云测云真机调试平台
  12. 笔记本设置wifi热点并抓包
  13. 计算机术语int,整型(计算机语言)_百度百科
  14. 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版
  15. sklearn.neighbors常用API介绍
  16. 通过监听器实现在线人数统计
  17. cent os 主题安装
  18. Java.lang.RuntimeException: Unable to start activity
  19. 开题报告:基于java闲置物品二手交易跳蚤市场平台 毕业设计论文开题报告模板
  20. leetcod_1_两数之和

热门文章

  1. java工作笔记021---Java设计模式_观察者模式_事件驱动模式
  2. java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
  3. IntelliJ Idea学习笔记004---IDEA中maven没有了
  4. Pose-Aware Face Recognition in the Wild--填坑1
  5. 2016年1月28日报
  6. 简直要吐槽!!enable-migrations fails on x64 Projects
  7. linux的用户及权限管理,Linux 用户及权限管理.doc
  8. linux下spark的python编辑_Linux下搭建Spark 的 Python 编程环境的方法
  9. java读取yaml数据_Java类读取Yaml内罐
  10. java 拷贝大文件_java高效实现大文件拷贝功能