<?php
//在所有模式設計中,有三種基礎設計模式,單例模式,工廠模式,註冊樹模式,其他模式往往基於這幾種模式,今天帶來的是單例模式。
//http://www.cnblogs.com/DeanChopper/p/4761253.html
class Single{
public $hash;
static protected $ins=null;
final protected function __construct(){
$this->hash = rand(1,9999);
}
static public function getInstance(){
if(self::$ins instanceof self){
return self::$ins;
}
self::$ins = new self();
return self::$ins;
}
}
$a = Single::getInstance();
echo $a->hash;
echo '<br>';
$aa = Single::getInstance();
echo $aa->hash;
/*
單例設計模式 (單態)
定義: 一個類 只能允許有 一個對象存在.
1.不讓進: 使類不能被實例化
2.留後門: 設置靜態方法
3.給對象: 在靜態方法裏實例化該類
4.判初夜: 判斷是否是 第一次產生該類的對象
5.設靜態: 靜態方法裏 要使用靜態屬性
*/
/*//1.不讓進: 使類不能被實例化-----------------*/
class Test
{
// 設置 一個封裝的構造方法
private function __construct()
{
//佔位, 我就是不讓你NEW我~~~
}
}
/*//2.留後門: 設置靜態方法--------------------*/
class Test
{
// 設置 一個封裝的構造方法
private function __construct()
{
//佔位, 我就是不讓你NEW我~~~
}
//後門
public static function getObject()
{
echo "啊,我是後門,進吧!<br>";
}
}
/*//3.給對象: 在靜態方法裏實例化該類------------------*/
class Test
{
// 設置 一個封裝的構造方法
private function __construct()
{
//佔位, 我就是不讓你NEW我~~~
}
//後門
public static function getObject()
{
echo "啊,我是後門,進吧!<br>";
return new self();//實例化一個對象給你
}
}
/*//4.判初夜: 判斷是否是 第一次產生該類的對象------------------*/
class Test
{
private $obj = null;//屬性值爲對象,默認爲null
// 設置 一個封裝的構造方法
private function __construct()
{
//佔位, 我就是不讓你NEW我~~~
}
//後門
public static function getObject()
{
echo "啊,我是後門,進吧!<br>";
if ($this->obj === null) {
$this->obj = new self();//實例化一個對象
}
//返回的屬性 其實就是本對象
return $this->obj;
}
}
//5.設靜態: 靜態方法裏 要使用靜態屬性------------------
class Test
{
private static $obj = null;//屬性值爲對象,默認爲null
// 設置 一個封裝的構造方法
private function __construct()
{
//佔位, 我就是不讓你NEW我~~~
}
//後門
public static function getObject()
{
echo "啊,我是後門,進吧!<br>";
if (self::$obj === null) {
self::$obj = new self();//實例化一個對象
}
//返回的屬性 其實就是本對象
return self::$obj;
}
}
/*Test::getObject();//使用靜態方法訪問該類裏的方法
exit;*/
$t1 = Test::getObject();
$t2 = Test::getObject();
$t3 = Test::getObject();
$t4 = Test::getObject();
$t5 = Test::getObject();
$t6 = Test::getObject();
$t7 = Test::getObject();
$t8 = Test::getObject();
//判斷 兩個對象 是否是同一個對象
if ($t1 === $t6) {
echo "哦, Yes! 是同一個實例<br>";
} else {
echo "哦, No! 不是同一個實例<br>";
}
//第五步是成品,前面4步都是一步一步的推的!
PHP設計模式之-----單利模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.