单例模式

本文介绍了单例模式的概念及其在PHP中的实现方式。单例模式确保一个类只有一个实例,并提供了全局访问点。文中还讨论了单例模式的应用场景及潜在缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式(Singleton Pattern)顾名思义,通过这种模式可以保证系统中一个类只有一个实例。

作为一种常用的软件设计模式,单例模式经常被用在数据库操作、缓存、线程池等方面。因为对这些操作来说,只有一个实例很重要,可以避免很多的new操作和连接关闭等操作,减少对系统和内存资源的消耗。

单例模式主要有三个要点

  1. 该类只能有一个实例;
  2. 它必须自行创建这个实例;
  3. 它必须向整个系统提供这个实例。

实现单例模式类的要点主要有三点

  1. 该类只提供私有的构造函数;
  2. 类定义中含有一个该类的静态私有对象;
  3. 该类提供一个静态的公有的函数用于创建或获取它本身的静态私有对象。
实现代码如下:
<?php
/**
 * @Author: hongxuan
 * @Date:   2016-05-11 00:45:24
 * @Last Modified by:   hongxuan
 * @Last Modified time: 2016-05-11 01:21:00
 */

/**
 * 单例模式
 */
class Singleton{
	//私有静态成员变量,保存类实例
	private static $_instance = null;
	/**
	 * 私有的构造函数,只能被其自身实例化,防止外界实例化对象
	 */
	private final function __construct(){
		echo "this is construct function";
	}
	/**
	 * 私有的__clone()方法,确保单例类不能被复制或克隆
	 * @return [type] [description]
	 */
	private function __clone(){}
	/**
	 * 静态公有方法,创建或获取它本身的静态私有对象,是单例模式的统一访问入口
	 * @return Singleton 返回唯一对象实例
	 */
	public static function getInstance(){
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self;
		}
		return self::$_instance;
	}
	/**
	 * 类中的其它方法
	 * @return [type] [description]
	 */
	public function getName(){
		echo "this is getName function";
	}
}

//获取实例
$test = Singleton::getInstance();
$test->getName();

?>
 

使用这一模式的缺点

  • 每次对象请求引用都要检查类的实例是否存在,这需要一些少量的开销;
  • 彼此间的依赖关系比较隐蔽,难以调试;
  • 因为不能用传统的new方法来创建实例,这可能会发生开发混淆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值