天天看点

设计模式——PHP实现单例模式

客官,留下你的赞;成为我的粉丝,一起上车哦!评论区欢迎你的留言

你可以在这里查看并

fork

源代码 GitHub

单例模式

下面将围绕

单例模式是什么

为什么要用单例模式

,以及怎么用

PHP语言实现单例模式

是什么

根据字面意思,可以简单的理解为只有一个实例的一种模式,也就是说不管new这个类多少次,始终只有一个对象实例。

为什么

一般在数据库连接、锁文件等方面采用单例模式。拿数据库连接来说,如果每次都重新创建一个新的实例来进行数据库连接的话,会消耗性能,浪费资源。如果使用了单例模式,上次创建的连接实例还存在,会继续使用,不进行创建;否则创建。

怎么做

下面用PHP语言实现,完整的代码可以到GitHub查看或

fork

<?php 
/**
 * 单例模式
 * 特点:四私一公(四私:私有实例变量、私有构造方法、私有的clone、私有的wakeup; 公有的获取实例方法)
 * 用途:数据库的连接(不断的创建实例会浪费资源,消耗性能;一个实例还存在,可以继续使用,不需要再次创建)、锁定文件
 * @author  new1024kb
 * @link https://github.com/Echo-Mr-Pengw/Design-Pattern
 * @since  2019-12-26
 */
//终结类,防止被继承
final class SingletonMode {

	/**
	 * [$instance 私有的实例变量]
	 * @var [string]
	 */
	private static $instance;
	
	/**
	 * [__construct 私有的构造方法,防止类的实例化]
	 */
	private function __construct() {}
	
	/**
	 * [__clone 私有的 克隆魔术方法,防止对象的clone]
	 * @return [type] [description]
	 */
	private function __clone() {}
	
	/**
	 * [__wakeup 私有的 反序列化魔术方法]
	 */
	private function __wakeup() {}
	
	/**
	 * [getInstance 获取实例的静态方法,只能通过此方法获取实例]
	 * @return [object] [对象实例]
	 */
	public static function getInstance() {
		if(self::$instance) {
			return self::$instance;
		}
		return new self;
	}
}
var_dump(SingletonMode::getInstance())