設計模式之單列

先寫一下self和this的區別,簡單講就是self是引用靜態類的類名,而$this是引用非靜態類的實例名。php

首先參考一段代碼this

class Dog
{
	
}

$dog1 = new Dog();
$dog2 = new Dog();

if($dog1 === $dog2){
	echo '這是同樣的';
}else{
	echo "這不是同樣的";
}

必然的,會彈出這不是同樣的。兩次new分別建立了對象。code

再看下面對象

/**
* 單例模式
* 使用單例模式避免大量的new操做消耗資源。
* 1,構造方法私有化,private
* 2,經過靜態成員變量保存對象
* 3,經過公共靜態方法建立對象
*/

class Dog
{
	private function __construct()
	{

	}

	//靜態屬性保存單列對象
	static private $instance;
	//經過靜態方法建立單列對象
	static public function getInstance()
	{
		//判斷$instance是否爲空,爲空建立,不爲空直接返回
		if (!self::$instance) {
			self::$instance = new self();
		}
		return self::$instance;
	}
}

$dog1 = Dog::getInstance();
$dog2 = Dog::getInstance();

if($dog1 === $dog2){
	echo '這是同樣的';
}else{
	echo "這不是同樣的";
}
相關文章
相關標籤/搜索