摘要:簡單工廠模式共同接口服務(wù)器端開發(fā)不知道將會(huì)被誰調(diào)用連接上了連接上了客戶端調(diào)用時(shí),不知道工廠類中實(shí)例化的幾種類,只需要傳遞參數(shù)就可以工廠模式共同接口服務(wù)器端開發(fā)不知道將會(huì)被誰調(diào)用連接上了連接上了服務(wù)器端添加了類前面的代碼不用修改連接上了客戶
簡單工廠模式
// 共同接口 interface db{ function conn(); } // 服務(wù)器端開發(fā)(不知道將會(huì)被誰調(diào)用) class dbsqlite implements db{ public function conn(){ echo "連接上了sqlite"; } } class dbmysql implements db{ public function conn(){ echo "連接上了mysql"; } } class Factory{ public static function creatDB($type){ if($type == "mysql"){ return new dbmysql(); }elseif($type == "sqlite"){ return new dbsqlite(); }else{ throw new Exception("Error DB type", 1); } } } // 客戶端調(diào)用時(shí),不知道工廠類中實(shí)例化的幾種類,只需要傳遞$type參數(shù)就可以 $db = Factory::creatDB("mysql"); $db->conn();工廠模式
// 共同接口 interface db{ function conn(); } interface Factory{ function createDB(); } // 服務(wù)器端開發(fā)(不知道將會(huì)被誰調(diào)用) class dbsqlite implements db{ public function conn(){ echo "連接上了sqlite"; } } class dbmysql implements db{ public function conn(){ echo "連接上了mysql"; } } class mysqlFactory implements Factory{ public function createDB(){ return new dbmysql(); } } class sqliteFactory implements Factory{ public function createDB(){ return new dbsqlite(); } } // =====服務(wù)器端添加了Oracle類 // 前面的代碼不用修改 class dboracle implements db{ public function conn(){ echo "連接上了oracle"; } } class oracleFactory implements Factory{ public function createDB(){ return new dboracle(); } } // =====客戶端開始==== $fact = new mysqlFactory(); $db = $fact->createDB(); $db->conn(); $fact = new sqliteFactory(); $db = $fact->createDB(); $db->conn(); $fact = new oracleFactory(); $db = $fact->createDB(); $db->conn(); // 在面向?qū)ο笤O(shè)計(jì)法則中,重要的開閉原則--對(duì)于修改是封閉的,對(duì)于擴(kuò)展是開放的單例模式
// 第二步 封鎖new操作 class sigle{ protected static $ins = null; // 方法前加final,則方法不能被覆蓋,在類前加final,則不能被繼承 final protected function __contruct(){ } public static function getIns(){ if(self::$ins === null){ self::$ins = new self(); } return self::$ins; } // 防止被克隆 final protected function __clone(){} } $s1 = sigle::getIns(); // $s2 = clone $s1; $s2 = sigle::getIns(); if($s1 === $s2){ echo "同一個(gè)對(duì)象"; }else{ echo "不是同一個(gè)對(duì)象"; }觀察者模式
class User implements SplSubject{ public $lognum; public $hobby; protected $observers = null; public function __construct($hobby){ $this->lognum = rand(1,10); $this->hobby = $hobby; $this->observers = new SplObjectStorage(); } public function login(){ $this->notify(); } public function attach(SplObserver $observer){ $this->observers->attach($observer); } public function detach(SplObserver $observer){ $this->observers->detach($observer); } public function notify(){ $this->observers->rewind(); while ($this->observers->valid()) { $observer = $this->observers->current(); $observer->update($this); $this->observers->next(); } } } class security implements SplObserver{ public function update(SplSubject $subject){ if($subject->lognum<3){ echo "這是第".$subject->lognum."次安全登錄"; }else{ echo "這是第".$subject->lognum."次登錄,異常"; } } } class ad implements SplObserver{ public function update(SplSubject $subject){ if($subject->hobby == "sports"){ echo "籃球"; }else{ echo "好好學(xué)習(xí)"; } } } // 實(shí)施觀察 $user = new User("sports"); $user->attach(new security()); $user->attach(new ad()); $user->login();裝飾器模式
// 裝飾器模式做文章修飾功能 class baseArt{ protected $content; protected $art = null; public function __construct($content){ $this->content = $content; } public function decorator(){ return $this->content; } } // 編輯文章摘要 class editorArt extends baseArt{ public function __construct(baseArt $art){ $this->art = $art; $this->decorator(); } public function decorator(){ //return $this->art->content .= "小編摘要"; return $this->content = $this->art->decorator() . "小編摘要"; } } // SEO添加內(nèi)容 class SEOart extends baseArt{ public function __construct(baseArt $art){ $this->art = $art; $this->decorator(); } public function decorator(){ return $this->content = $this->art->decorator() . "SEO關(guān)鍵詞"; } } // 無論是哪個(gè)先編輯,順序都可以進(jìn)行交換 $x = new SEOart(new editorArt(new baseArt("天天向上"))); $y = new editorArt(new SEOart(new baseArt("天天向上"))); echo $x->decorator(); echo "
"; echo $y->decorator();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30944.html
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對(duì)象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對(duì)那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:接下來會(huì)對(duì)其中五個(gè)比較常見的運(yùn)行模式進(jìn)行說明。模式是目前主流的服務(wù)運(yùn)行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運(yùn)行于環(huán)境。 SAPI 這里所說的 PHP 運(yùn)行模式, 其實(shí)指的是 SAPI (Server Application Programming Interface,服務(wù)端應(yīng)用編程端口 )。SAPI 為 PHP 提供了一個(gè)和外部通信的接口, PHP 就是通過這...
摘要:簡單字符串緩存實(shí)戰(zhàn)完整實(shí)戰(zhàn)種設(shè)計(jì)模式設(shè)計(jì)模式是面向?qū)ο蟮淖罴褜?shí)踐成為專業(yè)程序員路上用到的各種優(yōu)秀資料神器及框架成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 九個(gè)很有用的 PHP 代碼 php 代碼 國內(nèi)值得關(guān)注的...
摘要:的機(jī)器學(xué)習(xí)庫的機(jī)器學(xué)習(xí)庫,包括算法交叉驗(yàn)證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來的大會(huì)上,她將和大家分享在機(jī)器學(xué)習(xí)領(lǐng)域的全新可能。入門總結(jié)入門相關(guān),如安裝配置基本使用等。 基于 Swoole 開發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個(gè)新特性,可以基于 Swoole 使用 C++ 語言開發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊(cè) PHP 內(nèi)置函數(shù)和類。現(xiàn)在可以基于 Swoole 來編寫 PHP ...
摘要:當(dāng)客戶端請(qǐng)求到達(dá)時(shí),進(jìn)程管理器選擇并連接到一個(gè)解釋器。子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回。子進(jìn)程接著等待并處理來自進(jìn)程管理器運(yùn)行在中的下一個(gè)連接。 目前常見的4種PHP運(yùn)行模式 CGI通用網(wǎng)關(guān)接口模式 FAST-CGI模式 CLI命令行模式 模塊模式 運(yùn)行模式 CGI通用網(wǎng)關(guān)接口模式 每有一個(gè)用戶請(qǐng)求,都會(huì)先要?jiǎng)?chuàng)建cgi的子進(jìn)程,然后處理請(qǐng)求,處理完后結(jié)束這個(gè)子進(jìn)程...
摘要:話說當(dāng)下一共有種運(yùn)行模式,分別是和模塊模式。使用,全稱進(jìn)程管理器進(jìn)行管理。工作原理啟動(dòng)時(shí)載入進(jìn)程管理器進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)解釋器進(jìn)程并等待來自的連接當(dāng)客戶端請(qǐng)求到達(dá)時(shí),進(jìn)程管理器選擇并連接到一個(gè)解釋器。 我們知道 workerman 程序需要在php-cli模式下運(yùn)行,也就是命令行模式,這塊我們有必要了解一下。 話說PHP當(dāng)下一共有4種運(yùn)行模式,分別是CGI、FastCGI、...
閱讀 3098·2021-11-22 09:34
閱讀 601·2021-11-22 09:34
閱讀 2447·2021-10-08 10:18
閱讀 3384·2021-09-22 15:57
閱讀 2595·2021-09-22 15:25
閱讀 2412·2019-08-30 15:54
閱讀 2120·2019-08-30 15:44
閱讀 1805·2019-08-29 11:18