国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > PHP設(shè)計(jì)模式之模板方法模式

PHP設(shè)計(jì)模式之模板方法模式

時間:2023-06-11 20:42:01 | 來源:網(wǎng)站運(yùn)營

時間:2023-06-11 20:42:01 來源:網(wǎng)站運(yùn)營

PHP設(shè)計(jì)模式之模板方法模式:模板方法模式,也是我們經(jīng)常會在不經(jīng)意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當(dāng)子類中有重復(fù)的動作時,將他們提取出來,放在父類中進(jìn)行統(tǒng)一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做項(xiàng)目,每次的項(xiàng)目流程實(shí)都差不多,都有調(diào)研、開發(fā)、測試、部署上線等流程。而具體到每個項(xiàng)目中,這些流程的實(shí)現(xiàn)又不會完全相同。這個流程,就像是模板方法,讓我們每次都按照這個流程進(jìn)行開發(fā)。

Gof類圖及解釋

GoF定義:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

GoF類圖
代碼實(shí)現(xiàn)
abstract class AbstractClass{ public function TemplateMethod() { $this->PrimitiveOperation1(); $this->PrimitiveOperation2(); } abstract public function PrimitiveOperation1(); abstract public function PrimitiveOperation2();}定義一個抽象類,有一個模板方法TemplateMethod(),這個方法中我們對算法操作方法進(jìn)行調(diào)用。而這些算法抽象方法是在子類中去實(shí)現(xiàn)的。

class ConcreteClassA extends AbstractClass{ public function PrimitiveOperation1() { echo '具體類A實(shí)現(xiàn)方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具體類A實(shí)現(xiàn)方法2', PHP_EOL; }}class ConcreteClassB extends AbstractClass{ public function PrimitiveOperation1() { echo '具體類B實(shí)現(xiàn)方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具體類B實(shí)現(xiàn)方法2', PHP_EOL; }}具體的實(shí)現(xiàn)類,它們只需要去實(shí)現(xiàn)父類所定義的算法就可以了。

$c = new ConcreteClassA();$c->TemplateMethod();$c = new ConcreteClassB();$c->TemplateMethod();在客戶端的調(diào)用中,實(shí)例化子類,但調(diào)用的是子類所繼承的父類的模板方法。就可以實(shí)現(xiàn)統(tǒng)一的算法調(diào)用了。

在公司中,我非常的推崇敏捷式的項(xiàng)目管理,當(dāng)然,這里也不是說傳統(tǒng)的項(xiàng)目管理有多么不好,只是敏捷更適合我們這種短平快的公司。在敏捷中,我們采用的是Scurm框架,它其實(shí)就是一個模板。它定義了四種會議、三種人員、三個工具。在每個項(xiàng)目的具體實(shí)現(xiàn)中,我們都會遵守這些規(guī)則,但具體的實(shí)現(xiàn)又不會一樣。比如有時我們是一周一個迭代,有時是一個月一個迭代。有時我們不需要回顧會議,而是將回顧和評審會議放在了一起進(jìn)行。不管怎么樣,我們會在Scurm的基礎(chǔ)上進(jìn)行靈活的項(xiàng)目開發(fā)。而做為領(lǐng)導(dǎo)的我,只需要在每個項(xiàng)目中調(diào)取Scurm的基本流程就可以了。所以說,公司的強(qiáng)大和大家的學(xué)習(xí)是分不開的,好用的東西當(dāng)然要時刻學(xué)習(xí)分享并應(yīng)用啦!!

完整代碼:https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method.php

實(shí)例

不發(fā)短信了,這次我們實(shí)現(xiàn)的是一個Cache類的初始化部分。就像上文說過的一些框架中的工具類。一般Cache我們會使用Memcached或者Redis來實(shí)現(xiàn),所以我們抽取一個公共Cache類,然后讓Memcached和Redis的Cache實(shí)現(xiàn)類都繼承它。在公共類中,通過模板方法來進(jìn)行實(shí)現(xiàn)類的一些初始化工作,這些工作由父類統(tǒng)一調(diào)用,實(shí)現(xiàn)類只需要實(shí)現(xiàn)每一個步驟的具體內(nèi)容就可以了。

緩存類圖
完整源碼:https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method-cache.php

<?phpabstract class Cache{ private $config; private $conn; public function __construct() { $this->init(); } public function init() { $this->GetConfig(); $this->OpenConnection(); $this->CheckConnection(); } abstract public function GetConfig(); abstract public function OpenConnection(); abstract public function CheckConnection();}class MemcachedCache extends Cache{ public function GetConfig() { echo '獲取Memcached配置文件!', PHP_EOL; $this->config = 'memcached'; } public function OpenConnection() { echo '鏈接memcached!', PHP_EOL; $this->conn = 1; } public function CheckConnection() { if ($this->conn) { echo 'Memcached連接成功!', PHP_EOL; } else { echo 'Memcached連接失敗,請檢查配置項(xiàng)!', PHP_EOL; } }}class RedisCache extends Cache{ public function GetConfig() { echo '獲取Redis配置文件!', PHP_EOL; $this->config = 'redis'; } public function OpenConnection() { echo '鏈接redis!', PHP_EOL; $this->conn = 0; } public function CheckConnection() { if ($this->conn) { echo 'Redis連接成功!', PHP_EOL; } else { echo 'Redis連接失敗,請檢查配置項(xiàng)!', PHP_EOL; } }}$m = new MemcachedCache();$r = new RedisCache();
說明

下期看點(diǎn)

模板方法模式是不是也非常簡單。最主要的是這樣的設(shè)計(jì)模式跟我們的生活很接近,在我們的工作學(xué)習(xí)過程會非常容易見到并使用到。這樣的模式簡直不能掛在常用設(shè)計(jì)模式的標(biāo)簽下,因?yàn)樗瘸S酶S?。好了,我們的進(jìn)度還不錯喲,下一個模式正等著我們呢,它可是大名鼎鼎的單例模式。


===============

關(guān)注公眾號:【硬核項(xiàng)目經(jīng)理】獲取最新文章

添加微信/QQ好友:【DarkMatterZyCoder/149844827】免費(fèi)得PHP、項(xiàng)目管理學(xué)習(xí)資料

關(guān)鍵詞:模式,方法,模板,設(shè)計(jì)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉