我正在读一本介绍适配器模式使用的书。它说适配器模式经常在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?我们可以在不使用DatabaseAdapterInterface的情况下定义DatabaseAdapterPDO和DatabaseAdapterMySQLi中的所有方法,我们可以节省一些代码来编写DatabaseAdapterInterface,我们可以吗?或者使用DatabaseAdapterInterface可以强制程序员实现所需的方法,以便程序员不会错过任何所需的方法?
答案 0 :(得分:-1)
你读过的那本书是错误的。
当您针对现有API进行编码然后想要切换时,将使用适配器模式。您接下来要做的是创建模仿旧API的类,以便您可以使用新库而无需更改整个代码库。
您创建的类通常称为包装类。
常规接口用于定义API,以便任何人都可以实现它,从而避免使用适配器模式。
区别在于目的。适配器用于解决两个库具有不同API的问题,而无需重写整个应用程序。接口用于声明API。