(一)PHP单例模式(Singleton Pattern)

作者: 温新

分类: 【设计模式】

阅读: 4217

时间: 2019-04-25 16:16:58

单例模式(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;
    }

}
请登录后再评论