溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP設(shè)計模式之適配器模式

發(fā)布時間:2020-07-15 07:49:36 來源:網(wǎng)絡 閱讀:1127 作者:AndyMac 欄目:web開發(fā)

index.php

<?php
//適配器模式
//適配器模式只是將某個對象的接口適配為另一個對象所期望的接口
//PHP適配器模式原理,先創(chuàng)建目標實現(xiàn)方法,然后通過適配器類來連接原功能和目標方法,來實現(xiàn)功能的擴展.
function __autoload($filename){
    include_once 'class/'.$filename.'.class.php';
}
/*
 * 原來的功能中只有輸出錯誤到控制臺,但是后來要求增加一個輸出錯誤到csv中,方便記錄,在不更改基類的情況加,通過適配器模式,繼承原來得錯誤類,
 * 并且擴展到適配器中,更改代碼,實現(xiàn)輸出到csv中.而且也不影響原來輸出到控制臺中.實現(xiàn)功能的擴展.
 */
//注釋代碼模仿原來的錯誤輸出功能
//$error=new errorObject("404:Not Found");
// $log=new logToConsole($error);
// $log->write();
//【主要角色】
//目標(Target)角色:定義客戶端使用的與特定領(lǐng)域相關(guān)的接口,這也就是我們所期待得到的
//源(Adaptee)角色:需要進行適配的接口
//適配器(Adapter)角色:對Adaptee的接口與Target接口進行適配;適配器是本模式的核心,適配器把源接口轉(zhuǎn)換成目標接口,此角色為具體類
//使用場景
//1、你想使用一個已經(jīng)存在的類,而它的接口不符合你的需求
//2、你想創(chuàng)建一個可以復用的類,該類可以與其他不相關(guān)的類或不可預見的類協(xié)同工作
//3、你想使用一個已經(jīng)存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口(僅限于對象適配器)
//以下為增加新的功能
$error=new logToCSVAdapter("404:Not Found");
$log=new logToCSV($error);
$log->write();
?>


原始功能類

errorObject.class.php

<?php
/*
 * 錯誤基類
 */
class errorObject{
    private $_error;
    function __construct($error){
        $this->_error=$error;
    }
                                                                                                                                 
    function getError(){
        return $this->_error;
    }
}
?>


logToConsole.class.php

<?php
/*
 * 輸出到控制臺,原始錯誤執(zhí)行代碼
 */
class logToConsole{
    private $_errorObject;
    function __construct($o){
        $this->_errorObject=$o;
    }
                                                                                                                       
    function write(){
        fwrite(STDERR, $this->_errorObject->getError());
    }
}
?>


以上就是原來的功能,將指定的錯誤輸出到控制臺顯示出來.現(xiàn)在的需求是擴展一個寫入CSV文件中得功能.在不改變原來的功能的情況下.擴展功能


logToCSV.class.php


<?php
/*
 * 輸出錯誤到csv文件
 */
class logToCSV{
    const CSV_LOCATION='log.csv';
    private $_errorObject;
                                                                                              
    function __construct($o){
        $this->_errorObject=$o;
    }
                                                                                              
    function write(){
        $line=$this->_errorObject->getErrorNumber();
        $line.=',';
        $line.=$this->_errorObject->getErrorText();
        $line.="\n";
        file_put_contents(self::CSV_LOCATION, $line,FILE_APPEND);
    }
}
?>



接下來要做的就是將新得logToCSV方法和原來寫得errorObject連接起來使用,兩種方法,可以更改原來得errorObject類,或者是使用適配器模式,新增一個基類,來重寫原來的功能

logToCSVAdapter.class.php

<?php
/*
 * 擴展錯誤類,并且增加新的功能來支持logToCSV類中的方法
 */
class logToCSVAdapter extends errorObject{
    private $_errorNumber,$_errorText;
      
    function __construct($error){
        //繼承父類的初始化.并且增加新的方法.
        parent::__construct($error);
        $parts=explode(":", $error);
        $this->_errorNumber=$parts[0];
        $this->_errorText=$parts[1];
    }
      
    function getErrorNumber(){
        return $this->_errorNumber;
    }
      
    function getErrorText(){
        return $this->_errorText;
    }
}
?>

PHP設(shè)計模式之適配器模式

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI