(一)PHP单例模式(Singleton Pattern)
单例模式(Singleton Pattern),顾名思义,只有一个实例。单例模式确保某个类只能有一个实例,且自行实例化并向整个系统提供这个实例。
1、 什么是单例模式?
作为对象的创建模式,单例模式确保某一个类有且只有一个实例,并且对外提供这个全局实例的访问入口。它不会<
2、为什么要使用单例模式?
- 在数据库操作中,存在大量的实例化对象操作,造成资源浪费
- 若系统中需要一个类来全局控制某些配置信息,那么单例模式很容易实现
怎么实现单例模式?四私一公
- 私有化静态属性:防止直接访问存储实例属性
- 私有化构造方法:防止使用new创建多个实例
- 私有化克隆方法:防止从外部克隆对象
- 私有化重建方法:防止反序列化
4、单例模式使用场景
- 生成唯一序列号环境;
- 创建一个对象所消耗的资源过多
5、单例模式缺点
- 单例模式扩展困难。若要扩展,只有修改代码
- 不利于测试。开发环境下,单例模式若没有完成,则无法进行测试
- 单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否为单例,是否需要使用单例模式由环境决定,而单例模式把“要单例”和业务逻辑整合在一个类中
6、代码实现
class Singleton
{
// 私有化静态属性
private static $instance = null;
// 私有化构造函数
private function __construct()
{}
// 私有化克隆方法
private function __clone()
{}
// 私有化重建方法
private function __wakeup()
{}
// 公有静态方法,提供当前类唯一实例
public static function getInstance()
{
// 检测当前类属性 $instance 是否保存当前类实例
if (self::$instance == null) {
// 若没有保存当前类实例,则创建当前类实例
self::$instance = new self();
}
// 若已保存当前类实例,则直接返回当前类实例
return self::$instance;
}
}
请登录后再评论