2017-07-12 141 views
-1

我在讀一本介紹適配器模式使用的書。它表示,在Web項目中經常使用適配器模式,作爲使用數據庫API(如PDO或mysqli)而不將頁面反覆連接到該數據庫API的方式。下面是示例代碼:不使用適配器接口的適配器模式?

interface DatabaseAdapterInterface 
{ 
function setConnectionInfo($values=array()); 
function closeConnection(); 
function runQuery($sql, $parameters=array()); 
function fetchField($sql, $parameters=array()); 
function fetchRow($sql, $parameters=array()); 
function fetchAsArray($sql, $parameters=array());  
function insert($tableName, $parameters=array()); 
function beginTransaction(); 
function commit(); 
function rollBack(); 
//many other methods 
} 

class DatabaseAdapterPDO implements DatabaseAdapterInterface 
{ 
//implements all the methods in the DatabaseAdapterInterface 
} 

class DatabaseAdapterMySQLi implements DatabaseAdapterInterface 
{ 
//...implements all the methods in the DatabaseAdapterInterface 
} 

任何客戶端類(或網頁),其 需要利用數據庫將通過具體的適配器,這樣做的:

$connect = array(DBCONNECTION, DBUSER, DBPASS); 
$adapter = new DatabaseAdapterPDO($connect); 
$sql = 'SELECT * FROM ArtWorks WHERE ArtWorkId=?'; 
$results = $adapter->runQuery($sql, array(5)); 

雖然此示例代碼中明確包含沒有PDO代碼,它不完全免費從依賴到我們的數據庫API的 。

我明白了,但我不知道爲什麼我們需要有DatabaseAdapterInterface?我們只需在DatabaseAdapterPDO和DatabaseAdapterMySQLi中定義所有的方法,而無需使用DatabaseAdapterInterface,我們可以節省一些編寫DatabaseAdapterInterface的代碼,我們可以嗎?或者使用DatabaseAdapterInterface可以強制程序員實現所需的方法,以便程序員不會錯過任何所需的方法?

+0

'適配器模式經常用於Web項目中,作爲利用數據庫API(如PDO或mysqli)的一種方式,而不必將頁面反覆連接到數據庫API。「 - 這聽起來更像[外牆模式](https://en.wikipedia.org/wiki/Facade_pattern)。你能和我們分享這本書的參考嗎? – Fuhrmanator

回答

-1

你讀過的書是錯的。

適配器模式用於對現有API進行編碼然後想要切換時使用。然後你要做的是創建模仿舊API的類,這樣你就可以使用新的庫而不必更改整個代碼庫。

您創建的類通常稱爲包裝類。

常規接口用於定義API,以便任何人都可以實現它,因此避免使用適配器模式。

區別在於目的。適配器用於解決兩個庫有不同API的問題,而不必重寫整個應用程序。接口用於聲明一個API。