成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php對象設(shè)計進階

Cruise_Chan / 3151人閱讀

摘要:面向?qū)ο缶幊虅t將職責(zé)從客戶端代碼中轉(zhuǎn)移到專門的對象中,盡量減少相互依賴。實例說明面向?qū)ο蠛兔嫦蜻^程首先,面對這樣一個需求,寫一個讀取文件配置工具。

面向?qū)ο蠛兔嫦蜻^程 面向?qū)ο蠛瓦^程式編程的核心區(qū)別就是職責(zé)分配

過程式代碼表現(xiàn)的行為就是一系列命令和方法的連續(xù)調(diào)用,控制代碼根據(jù)不同的條件執(zhí)行不同的職責(zé)代碼。這種自頂向下的控制方式導(dǎo)致了重復(fù)和相互依賴的代碼遍布于整個項目。

面向?qū)ο缶幊虅t將職責(zé)從客戶端代碼中轉(zhuǎn)移到專門的對象中,盡量減少相互依賴。

實例說明面向?qū)ο蠛兔嫦蜻^程

首先,面對這樣一個需求,寫一個讀取文件配置工具。
配置文件的格式如下
key:value

面向過程的方式

此時需求明確,實現(xiàn)也簡單,兩個函數(shù)搞定


此時代碼較為緊湊且易于維護,但生活不可能一直都是一帆風(fēng)順,現(xiàn)在需求變更,需要新增一個支持xml文件讀取、寫入的功能。

此時我們假設(shè),加入if判斷xml后綴文件來執(zhí)行xml的讀取、寫入的方法?這樣read和write函數(shù)都要判斷條件,我們需要改兩處地方,如下。

function readParams( $sourceFile ) {
    $params = [];
    if (preg_match( "/.xml$/i", $sourceFile )) {
        // 執(zhí)行xml方式的讀取文件配置方法
    } else {
        // 執(zhí)行txt方式的讀取文件配置方法
    }
    return $params;
}

function writeParams( $params, $sourceFile ) {
    if ( preg_match( "/.txt$/i", $sourceFile )) {
        // 執(zhí)行寫xml的寫文件配置方法
    } else {
        // 執(zhí)行寫txt的寫文件配置方法
    }
}

從上面的修改就可以看出,假如需要支持更多的文件格式,就需要在read和write兩處方法內(nèi)分別添加來保持數(shù)據(jù)處理的一致性

面向?qū)ο蠓绞?/b>
//定義一個抽象的讀寫類
abstract class ParamHandler {
    protected $sourceFile;
    protected $params = [];
    
    function __construct( $source ) {
        $this->sourceFile = $source;
    }

    function addParams( $key, $val ) {
        $this->params[$key] = $val;
    }

    function getAllParams() {
        return $this->params;
    }

    //該處驗證傳入的文件類型,然后返回相應(yīng)操作的對象
    static function getInstance( $filename ) { 
        if ( preg_match("/.xml$/i", $filename) ) {
            return new XmlParseHandler( $filename );
        }
        return new TextParseHandler( $filename );
    }

    abstract function write();
    abstract function read();
}

//定義具體xml的實現(xiàn)子類
class XmlParseHandler extends ParamHandler {
    function write() {
        //實現(xiàn)xml的寫方法
    }

    function read() {
        //實現(xiàn)xml的讀方法    
    }

}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21315.html

相關(guān)文章

  • PHP 進階之路 - 后端多元化之快速切入 Java 開發(fā)

    摘要:以實現(xiàn)自己熟悉的東西為導(dǎo)向比如我們做后端開發(fā),首先是常用的循環(huán)迭代條件判斷增刪改成。它是由實現(xiàn)的,不保證元素的順序,也就是說所說元素插入的順序與輸出的順序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代碼:https://github.com/zhoumengka...整個項目我們我又細分了6個版本來演進,希望更加便于大家對比...

    Cristic 評論0 收藏0
  • PHP 進階之路 - 后端多元化之快速切入 Java 開發(fā)

    摘要:以實現(xiàn)自己熟悉的東西為導(dǎo)向比如我們做后端開發(fā),首先是常用的循環(huán)迭代條件判斷增刪改成。它是由實現(xiàn)的,不保證元素的順序,也就是說所說元素插入的順序與輸出的順序不一致。 下面是我直播的文字版,直播地址:https://segmentfault.com/l/15...代碼:https://github.com/zhoumengka...整個項目我們我又細分了6個版本來演進,希望更加便于大家對比...

    xi4oh4o 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    stormgens 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進階、CSS進階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    mylxsw 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<