什麼是介面卡模式
介面卡模式(Adapter Pattern)是作為兩個不相容的介面之間的橋樑。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。
這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。
舉個例子:
PHP常用的運算元據庫的方法有三種:MySQL、MySQLi和PDO,需要怎麼去適配呢,又或者說,還有Oracle、非關係型資料庫(Memcache、Redis)又怎麼去適配呢。
介面卡模式的實現
<?php
/**
* 資料庫介面卡
* Interface DatabaseAdapter
*/
interface DatabaseAdapter
{
/**
* 連線資料庫
* @param string $host
* @param int $port
* @param string $username
* @param string $password
* @param string $dbname
* @return mixed
*/
public function connect(string $host, int $port, string $username, string $password, string $dbname);
/**
* 執行sql
* @param string $sql
* @return mixed
*/
public function query(string $sql);
/**
* 關閉連線
* @return mixed
*/
public function close();
}
/**
* Class MySQLi
*/
class MySQLi implements DatabaseAdapter
{
/**
* 連線資料庫
* @param string $host
* @param int $port
* @param string $username
* @param string $password
* @param string $dbname
* @return mixed
*/
public function connect(string $host, int $port, string $username, string $password, string $dbname)
{
// TODO: Implement connect() method.
}
/**
* 執行sql
* @param string $sql
* @return mixed
*/
public function query(string $sql)
{
// TODO: Implement query() method.
}
/**
* 關閉連線
* @return mixed
*/
public function close()
{
// TODO: Implement close() method.
}
}
/**
* Class MySQL
*/
class MySQL implements DatabaseAdapter
{
/**
* 連線資料庫
* @param string $host
* @param int $port
* @param string $username
* @param string $password
* @param string $dbname
* @return mixed
*/
public function connect(string $host, int $port, string $username, string $password, string $dbname)
{
// TODO: Implement connect() method.
}
/**
* 執行sql
* @param string $sql
* @return mixed
*/
public function query(string $sql)
{
// TODO: Implement query() method.
}
/**
* 關閉連線
* @return mixed
*/
public function close()
{
// TODO: Implement close() method.
}
}
/**
* Class PDO
*/
class PDO implements DatabaseAdapter
{
/**
* 連線資料庫
* @param string $host
* @param int $port
* @param string $username
* @param string $password
* @param string $dbname
* @return mixed
*/
public function connect(string $host, int $port, string $username, string $password, string $dbname)
{
// TODO: Implement connect() method.
}
/**
* 執行sql
* @param string $sql
* @return mixed
*/
public function query(string $sql)
{
// TODO: Implement query() method.
}
/**
* 關閉連線
* @return mixed
*/
public function close()
{
// TODO: Implement close() method.
}
}
更多內容關注個人部落格:lemonlyue.github.io/
本作品採用《CC 協議》,轉載必須註明作者和本文連結