设计模式学习笔记(1)——单例模式

时间:2023-02-26 15:10:20
  • 单例模式是常用的设计模式之一,作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,特点:
  1. 某个类只能有一个实例,避免重复实例化。
  2. 必须自行创建这个实例,不允许外部实例化,不允许克隆。
  • 举个例子:
<?php
/**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序实例化类。从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法,以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存,使用场景:最常用的地方是数据库连接。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
*/
class Singleton
{
private static $_instance;

//阻止用户实例化 实例化抛出Fatal error
private function __construct(){}

//阻止用户复制对象实例 抛出Fatal error
public function __clone()
{
throw new Exception("not allow clone this class.");
}

//单例方法
public static function getInstance()
{
if(!(self::$_instance instanceof self))
{
self::$_instance = new self();
}

return self::$_instance;
}

public function doSomething()
{
echo("to do something");
}
}

//$singleton = new Singleton(); //Fatal error

$singleton = Singleton::getInstance();

$singleton->doSomething();

//$t = clone $singleton;//Fatal error