1 单例设计模式

单例模式是指整个应用中类只有一个对象实例的设计模式。

使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。

私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。

每次用 new 类名 的方式,就可以创建一个对象。我们必须禁止外部程序用 new 类名的方式来创建多个实例。

解决办法是:我们将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。

经典的设计模式主要有2种:懒汉式和饿汉式。下面分别展示代码。

懒汉式:

懒汉式单例模式既在需要的时候才创建单例对象,即“用时间换空间”。

//懒汉式
class Single {
    static private $instance = null;//声明一个静态变量(保存在类中唯一的一个实例)
    private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。

    }

    static public function getInstance(){//声明一个getInstance()静态方法,用于检测是否有实例对象
        if(self::$instance == null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
$instance = Single::getInstance();//得到实例

饿汉式:

饿汉式的特点是一开始就创建实例,即“用空间换时间”

php有一个特性,不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等。故我目前还无法实现php的饿汉式单例。下面用Java实现一下:

//饿汉式单例模式
public class Single2 {
    //设立静态变量,直接创建实例
    private static Single2 Single = new Single2();
 
    private Singlet2(){
        //私有化构造函数

    }
    
    //开放一个公有方法,返回实例
    public static Single2 getInstance(){
        return Single;
    }
}
原文地址:https://www.cnblogs.com/xlzfdddd/p/10540107.html