成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

php對象設(shè)計(jì)進(jìn)階

Cruise_Chan / 3198人閱讀

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

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

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

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

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

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

面向過程的方式

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


此時代碼較為緊湊且易于維護(hù),但生活不可能一直都是一帆風(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)分別添加來保持?jǐn)?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àn)證傳入的文件類型,然后返回相應(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的實(shí)現(xiàn)子類
class XmlParseHandler extends ParamHandler {
    function write() {
        //實(shí)現(xiàn)xml的寫方法
    }

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

}

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

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

相關(guān)文章

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

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

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

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

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

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

    mylxsw 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<