真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP中模板方法模式的示例分析

小編給大家分享一下PHP中模板方法模式的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

10年的浙江網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整浙江建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“浙江網(wǎng)站設(shè)計”,“浙江網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

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

Gof類圖及解釋

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

GoF類圖

PHP中模板方法模式的示例分析

代碼實現(xiàn)

abstract class AbstractClass
{
    public function TemplateMethod()
    {
        $this->PrimitiveOperation1();
        $this->PrimitiveOperation2();
    }

    abstract public function PrimitiveOperation1();
    abstract public function PrimitiveOperation2();
}

定義一個抽象類,有一個模板方法TemplateMethod(),這個方法中我們對算法操作方法進行調(diào)用。而這些算法抽象方法是在子類中去實現(xiàn)的。

class ConcreteClassA extends AbstractClass
{
    public function PrimitiveOperation1()
    {
        echo '具體類A實現(xiàn)方法1', PHP_EOL;
    }
    public function PrimitiveOperation2()
    {
        echo '具體類A實現(xiàn)方法2', PHP_EOL;
    }
}

class ConcreteClassB extends AbstractClass
{
    public function PrimitiveOperation1()
    {
        echo '具體類B實現(xiàn)方法1', PHP_EOL;
    }
    public function PrimitiveOperation2()
    {
        echo '具體類B實現(xiàn)方法2', PHP_EOL;
    }
}

具體的實現(xiàn)類,它們只需要去實現(xiàn)父類所定義的算法就可以了。

$c = new ConcreteClassA();
$c->TemplateMethod();

$c = new ConcreteClassB();
$c->TemplateMethod();

在客戶端的調(diào)用中,實例化子類,但調(diào)用的是子類所繼承的父類的模板方法。就可以實現(xiàn)統(tǒng)一的算法調(diào)用了。

  • 模板方法模式相信只要是做過一點面向?qū)ο箝_發(fā)的朋友都會多多少少使用過。因為真的非常常見

  • 一些框架中經(jīng)常會有某些功能類有初始化的功能,在初始化的函數(shù)中都會調(diào)用很多內(nèi)部的其他函數(shù),這其實也是一種模板方法模式的應用

  • 模板方法模式可以很方便的實現(xiàn)鉤子函數(shù)。就像很多模板或者開源系統(tǒng)中給你準備好的鉤子函數(shù)。比如某些博客開源程序會預留一些廣告位或者特殊位置的鉤子函數(shù)讓使用者自己按需實現(xiàn)

  • 模板方法模式適用于:一次性實現(xiàn)一個算法中不變的部分,并將可變的部分留給子類來實現(xiàn);將子類中公共的行為提取出來并集中到父類中;控制子類的擴展;

  • 這個模式體現(xiàn)了一個叫“好萊塢法則”的原則,那就是“別找我們,我們來找你”

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

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

實例

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

緩存類圖

PHP中模板方法模式的示例分析

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

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連接失敗,請檢查配置項!', 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連接失敗,請檢查配置項!', PHP_EOL;
        }
    }
}

$m = new MemcachedCache();

$r = new RedisCache();

說明

  • 這樣一個簡單的緩存類我們就實現(xiàn)了。是不是和很多框架中的代碼非常類似。

  • 子類只需要定義自己的實現(xiàn)就可以了,剩下的重復代碼都讓父類去完成,如果沒有父類,它們都需要自己實現(xiàn)一個init()方法

  • 當然,需要增加其它的實現(xiàn)類時,也只需要繼承這個Cache父類后完成自己的實現(xiàn)就可以了,客戶端面對這些實現(xiàn)類都能非常輕松,因為它們知道自己只需要先調(diào)用一下初始化方法可以使用這個類了,不管是哪一個實現(xiàn)類都是一樣的

以上是“PHP中模板方法模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


新聞名稱:PHP中模板方法模式的示例分析
分享網(wǎng)址:http://weahome.cn/article/ghpehd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部