您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“php常用的設(shè)計(jì)模式有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
1,含義
某個(gè)類只有一個(gè)實(shí)例,自動(dòng)實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)類的實(shí)例。
即:應(yīng)用程序只會(huì)有這個(gè)類的一個(gè)實(shí)例存在。
多用在數(shù)據(jù)庫操作,線程池,緩存,打印機(jī)中。
2,特點(diǎn)
只有一個(gè)實(shí)例,必須有構(gòu)造函數(shù),標(biāo)記為private
向其他成員提供訪問這個(gè)實(shí)例的靜態(tài)方法
必須自行創(chuàng)建這個(gè)實(shí)例,擁有一個(gè)保存類的實(shí)例的靜態(tài)成員變量
3,代碼
class SingleCase { private static $_instance; private function __construct() { echo 'i has been'; } public static function getInstance() { if(!isset(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; } private function __clone() { } }
備注:存在難以調(diào)試,隱藏著依賴關(guān)系
1,含義
工廠模式是一個(gè)類,而這個(gè)類包含一些方法,這些方法的作用或者功能就是實(shí)例化對(duì)象
工廠模式通常用來返回符合類似接口的不同的類
2,特點(diǎn)
工廠模式一般有一個(gè)命名為Factory的靜態(tài)方法
這個(gè)靜態(tài)方法接收一個(gè)參數(shù)
這個(gè)靜態(tài)方法根據(jù)參數(shù),返回不同的對(duì)象實(shí)例
3,代碼
class Factory { static public function getUser($type) { if ($type == 1) { return new A(); } return new B(); } } interface FetchName { public function getName() } class A implements FetchName { public function getName() } class B implements FetchName { public function getName() } //使用 $user = Factory::getUser(1); $user->getName();
備注:有啥用?
如果一個(gè)系統(tǒng),很多地方用 new User() 這種方式。有一天 new User('A');增加個(gè)參數(shù),所有地方都需要變更;
如果一個(gè)系統(tǒng),使用工廠模式User::getObj('1'); 假如參數(shù)1返回new User()這個(gè)對(duì)象實(shí)例; 有一天new User() 增加個(gè)參數(shù),我只需要改工廠中的類實(shí)例。
1,含義
觀察者模式為您提供了避免組件之間緊密耦合的另一種方法
分為主題和觀察者,都需要實(shí)現(xiàn)接口和方法
主題里面進(jìn)行觀察者注冊(cè),并設(shè)置一個(gè)方法,這個(gè)方法的作用是調(diào)用觀察者的方法進(jìn)行通知觀察者
2,特點(diǎn)
針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程
觀察者模式定義對(duì)象的一對(duì)多依賴
當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴者都會(huì)收到通知并自動(dòng)更新
3,代碼
class Paper { private $myObj = []; public function register($sub) { $this->myObj[] = $sub; } public function setMessage(){ if ($this->myObj) { foreach ($this->myObj as $obj) { $obj->update(); } } } } interface Observerable{ public function update(); } class Subscriber implements Observerable{ public function update(){ echo "Callback\n"; } }
備注:
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
$paper->setMessage();
只要任何類注冊(cè),調(diào)用setMessage()方法。其他注冊(cè)過的類都會(huì)收到update()方法的通知。
“php常用的設(shè)計(jì)模式有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。