Skip to content

单例模式属于创建型模式,是最简单的设计模式之一,主要解决一个全局使用的类频繁的创建与销毁的问题。在单例模式中类创建自己的对象,同时确保了在全局中类中只有单个对象被创建,单例类还提供一个不用实例化就可以访问它自己的全局静态访问点。

单例模式的具体表现为:

构造方法为私有方法,不可在外部直接创建类的对象,对象的创建于和获取需要通过特定的方法来实现,类自己创建自己。类的获取方法为静态方法(静态方法在类加载时就创建全局唯一)。

单例模式的适用性:

  1. 当一个类只能有一个实例,而且外部对象只能从一个公用的接口(方法)访问它时。
  2. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时

注意:不同于 JAVA 等其他语言,php 具有线程安全版本和非线程安全版本,在使用是不需要考虑线程的安全性问题。

代码示例:

php
class Singleton
{
    public static $singleton=null;

	//构造函数私有化,不可从外部直接实例化本类
    private function __contruct(){}

	//静态的对象获取方法,确保类只会被实例化一次
    public static function getInstance()
    {
        if(selef::$singleton==null){
            selef::$singleton = new Singleton();
        }
        return self::$singleton;
    }
}

//获取单例类
class Demo
{
    public function make()
    {
        $singleton = Singleton::getInstance();
    }
}