首頁 > 後端開發 > php教程 > PHP設計模式-適配器模式Adapter

PHP設計模式-適配器模式Adapter

WBOY
發布: 2016-07-29 09:14:50
原創
986 人瀏覽過

  在應用程式中,你或許會使用一個文件的程式碼庫,然而,我們常常要增加新的功能,這些功能要求使用不同的方式使用現有的物件。可能新功能只是需要一個不同的名字,也可能是新功能需要與原有的物件稍有不同的行為。

  針對上述問題,採用適配器模式是個很好的解決方案。使用適配器模式建立另一個物件,這個Adapter物件充當了原始應用與新功能之間的中介。適配器設計模式只是將某個物件的介面適配為另一個物件所期望的介面。

程式碼範例:

class errorObject{
	private $_error;

	public function __construct($error){
		$this->_error = $error;
	}

	public function getError(){
		return $this->_error;
	}
}

class logToConsole{
	private $_errorObject;

	public function __construct($errorObject){
		$this->_errorObject = $errorObject;
	}

	public function write(){
		fwrite(STDERR, $this->_errorObject->getError());
	}
}


$error = new errorObject("404:Not Found");
$log = new logToConsole($error);
$log->write();
登入後複製

假如有一天需求改變了,要求將錯誤記錄到一個CSV檔案中,CSV的格式要求第一列是數值錯誤代碼,第二列是錯誤文字。新需求已經給出了實現日誌記錄的程式碼,問題是這些程式碼是根據errorObject的另一個版本編寫的,該版本與目前使用的版本不同。新的errorObject類別有另外兩個名為getErrorNumber()和getErrorText()的方法,logToCSV類別會使用到這兩個方法:
class logToCSV{
	const CSV_LOCATION = "log.csv";

	private $_errorObject;

	public function __construct($errorObject){
		$this->_errorObject = $errorObject;
	}

	public function write(){
		$line = $this->_errorObject->getErrorNumber();
		$line .= ',';
		$line .= $this->_errorObject->getErrorText();
		$line .= '\n';

		file_put_contents(self::CSV_LOCATION, $line, FILE_APPEND);
	}
}
登入後複製
針對這個問題,我們可以採用以下兩種解決方案:

● 建立現有程式碼庫的errorObject類別;

● 建立一個Adapter類別;

考慮到保持這些公共介面標準性的需求,因此建立一個Adapter物件是最佳的解決方案。

新建立的適配器物件中必須存在現有errorObject的功能性,而且,getErrorNumber()和getErrorText()方法必須有效。

class logToCSVAdapter extends errorObject{
	private $_errorNumber, $_errorText;

	public function __construct($error){
		parent::__construct($error);

		$parts = explode(':', $this->getError());

		$this->_errorNumber = $parts[0];
		$this->_errorText = $parts[1];
	}

	public function getErrorNumber(){
		return $this->_errorNumber;
	}

	public function getErrorText(){
		return $this->_errorText;
	}
}

$error = new logToCSVAdapter("404:Not Found");
$log = new logToCSV($error);
$log->write();
登入後複製

在需要轉換一個物件的介面用於另一個物件時,實作Adapter物件不僅是最佳做法,而且還能減少很多麻煩。

適配器模式一般使用場景:

● 資料庫驅動(可查看各框架的驅動部分源碼)

● webservices(在多個不同的webservices中,使用適配器)

以上就介紹了PHP設計模式-轉接器模式Adapter,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

🎜 🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板