专栏首页北溟有鱼QAQ设计模式之单例模式

设计模式之单例模式

单例模式

什么是单例模式,单例模式的作用是什么?

  1. 首先,单例模式也是我们设计模式中,最基本,经常使用的一种模式!在我们的业务代码当中,本来我们要通过Db来查询数据库,但是我们如果不是用的单例模式的时候,每次查询都要重复new Db对象并使用,这个地方就造成了系统资源的浪费。所以我们最常见的单例模式的使用,就是在数据库操作当中以及其他的I/O操作。
  2. 单例类只能有一个实例。
  3. 单例类必须自己创建自己的唯一实例。
  4. 单例类必须给所有其他对象提供这一实例。

下面实现一个简单的单例类

<?php
//创建单例
class Singleton {
	// 实例对象
	private static $_instance = null; 
	
	/**
	 * 声明一个私有的构造函数,方式通过new来实例化
	 * 关闭: 通过初始化来实例化对象
	 */
	private function __construct() {
		
	}
	
	/**
	 * 获取对象实例
	 */
	public static function getInstance() {
		// 第一次实例化开始时, self::$_instance=null
		if (is_null(self::$_instance)) {
			// 给实例属性赋值     实例化当前类
			self::$_instance = new self();
		}
		// 第二次实例化时,self::$_instance!=null
		return self::$_instance;
	}
	
	/**
	 * 关闭clone对象复制的开关
	 */
	public function __clone() {
		die("单例模式不能克隆");
	}
}

如何使用这个单例类来获取我们的实例的

<?php
Singleton::getInstance(); // 首次初始化(实例化)

通过上面的例子,我们实现了单例模式,无论我们怎样实例化类,都只能实例化一次类,大大的节省里系统资源的创建和销毁的开销

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式之注册器模式

    北溟有鱼QAQ
  • PHP自动加载与composer自动加载

    当我们编写面向对象的程序时,通常是将类分别放在不同的文件中。但这样一来,当我们调用其他类的时候,则需要先手动引入该文件(否则会因为当前程序中没有该类名的类而报错...

    北溟有鱼QAQ
  • 关于php对象池

    对象池需要从php的生命周期说起,php的应用大部分都是web网站,而大部分web网站使用的都是cgi模式进行运行的,导致php生命周期跟随着请求结束而结束,从...

    北溟有鱼QAQ
  • 为什么用枚举类来实现单例模式越来越流行?

    这是设计模式的第一篇文章,我们从单例模式开始入手,单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从...

    黄泽杰
  • 23种设计模式之单例模式

    单例模式    单例模式(Singleton Pattern)是一个比较简单的模式,其定义为:Ensure a class has only one insta...

    新人小试
  • 设计模式之单例模式(Singleton Pattern),太简单了

    单例模式就是确保某一个类只有一个实例,并且提供一个全局访问点。单例模式有如下几个特点:

    Java架构
  • User Story 无法在规定的时间内完成, 都是估算人天的方法不对惹的祸?

    当User Story 无法在规定时间内完成时, 许多人的第一反应便是: User Story 估算的方法不对, 所以, 需找一个可 “准确” 估算人天的方法◦...

    Ken Fang 方俊贤
  • 用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换

      主流被使用的地理坐标系并不统一,常用的有WGS84、GCJ02(火星坐标系)、BD09(百度坐标系)以及百度地图中保存矢量信息的web墨卡托,本文利用Pyt...

    Feffery
  • 分组计算描述性统计量函数—by()函数

    简单点说by(data, INDICES, FUN)函数的典型用法: 是将data数据框或矩阵按照INDICES因子水平进行分组,然后对每组应用FUN函数。 是...

    生信技能树
  • C++ FFLIB之ffcount:通用数据分析系统

    摘要: 数据分析已经变得不可或缺,几乎每个公司都依赖数据分析进行决策。在我从事的网游领域,数据分析是策划新功能、优化游戏体验最重要的手段之一。网游领域的数据分析...

    知然

扫码关注云+社区

领取腾讯云代金券