單例模式又稱為職責模式,它用來在程式中建立乙個物件,就是例項化出來的物件是唯一的。
基本格式(三私一公-兩靜態):
擁有乙個private建構函式
擁有乙個private的儲存靜態例項物件
擁有乙個private的轉殖方法
擁有乙個建立這個例項的public的靜態方法,單例類不能再其它類中直接例項化,只能被其自身例項化。
附上自己手敲的例項
<?php
/** *@author: huang
*@date: 2017-09-27 13:45:08
*@last modified by: huang
*@last modified time: 2017-09-27 13:54:22
*/class
student
private
function
__clone
()
public
static
function
getinstance
()
return
self::$instance;
}}$single = student::getinstance();
var_dump($single);
$single2 = student::getinstance();
var_dump($single2);
// $single3 = clone $single;
補充:
這裡的構造方法宣告為私有是為了禁止在類外通過new關鍵字例項化該類。由於getinstance是靜態的方法,那麼裡面不能訪問非靜態的屬性,又不想讓外部訪問該靜態屬性,因此宣告為靜態私有最合適不過。。
工廠模式,工廠方法或者類生成物件,而不是在**中直接new
<?php
/** *@author: huang
*@date: 2017-09-27 14:07:20
*@last modified by: huang
*@last modified time: 2017-09-27 17:21:21
*/abstract
class
optclass
addextends
opt}
class
decextends
opt}
class
multi
extends
opt}
class
chuextends
opt }
}class
factory
}$obj1 = factory::make('add');
$obj1->getvalue(2,1);
$obj1 = factory::make('dec');
$obj1->getvalue(2,1);
$obj1 = factory::make('multi');
$obj1->getvalue(2,1);
$obj1 = factory::make('chu');
$obj1->getvalue(2,1);
原理:通過工廠類,乙個類只能生產乙個物件. 將新物件存入陣列,判斷陣列中是否有該類物件,如果有,則不會再重新建立.所以乙個類只能他建立乙個物件.
<?php
/** *@author: huang
*@date: 2017-09-27 20:44:24
*@last modified by: huang
*@last modified time: 2017-09-27 20:53:07
*/class
sigle_factory
return
self::$arr[$classname];
}}class
a{}class
b{}$obj1 = sigle_factory::make('a');
$obj2 = sigle_factory::make('a');
$obj3 = sigle_factory::make('b');
$obj4 = sigle_factory::make('b');
var_dump($obj1,$obj2,$obj3,$obj4);
OO學習 有關設計模式
原則 物件導向程式設計,培養物件導向思想。ddd,設計模式是物件導向的左右手。物件是人類的正常思維方式,它是表示具體東西或抽象的事物,它有單一的職責和統一的行為。比如想到乙個長方形的周長或面積,不能應當就想到對應的周長或面積,而是應當先想到長方形對應的是乙個物件,它有對應的屬性,長和寬,然後有對應的...
PHP的設計模式
常用的 php的設計模式 1.單例模式 顧名思義,就是只有乙個例項。作為物件的建立模式,單例模式確 保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。為什麼要使用php單例...
php設計 PHP常用設計模式
1 單例模式指在整個應用中只有乙個物件例項的設計模式 class single public rand static private instance 類直接呼叫 final private function construct private防止外部new this rand mt rand 1,...