您好,登錄后才能下訂單哦!
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; } } ?>
免責聲明:本站發(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)容。