介面卡模式(有時候也稱包裝樣式或者包裝)將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起。
如程式資料庫有關聯mysql、mysqli、pdo、sqlite、postgresql等操作,而你需要根據情況換資料庫操作時,可以使用介面卡模式統一介面,這樣**中除了資料庫配置之外,就不需要做而外的更改。
同理cache(快取)的場景也是,無論使用memcache還是redis等,在更換的時候都會很方便,節約時間。
注:在一些流行框架中都可以看到此模式,詳情請自行參閱框架原始碼。
**:
<?php
header('content-type:text/html;charset=utf-8');
/** * 介面卡模式演示**
* target適配目標: idatabase介面
* adaptee被適配者: mysql和mysql_i、postgresql的資料庫操作函式
* adapter介面卡 :mysql類和mysql_i、postgresql類
*//**
* inte***ce idatabase 適配目標,規定的介面將被適配物件實現
* 約定好統一的api行為
*/inte***ce idatabase
/** * class mysql 介面卡
*/class mysql implements idatabase
/*** 實現查詢方法
** @param $sql 需要被查詢的sql語句
* @return mi
*/public function query($sql)
// 實現關閉方法
public function close()
}/**
* class mysql 介面卡
*/class mysql_i implements idatabase
/*** 實現查詢方法
** @param $sql 需要被查詢的sql語句
*/public function query($sql)
// 實現關閉
public function close()
}/**
* class postgresql 介面卡
*/class postgresql implements idatabase
/*** 實現查詢方法
** @param $sql 需要被查詢的sql語句
*/public function query($sql)
// 實現關閉方法
public function close()
}/**
* 客戶端使用演示
* 這裡以mysql為例
* 只要模式設計好,不論有多少種資料庫,實現和呼叫方式都是一樣的
* 因為都是實現的同乙個介面,所以都是可以隨意切換的
*/$host = 'localhost';
$username = 'root';
$password = 'root';
$database = 'mysql';
//$client = new postgresql();
//$client = new mysql();
$client = new mysql_i();
$client->connect($host, $username, $password, $database);
$result = $client->query("select * from db");
while ($rows = mysqli_fetch_array($result))
$client->close();
執行結果:
array(44)
從以上結果可看出,資料庫連線以及查詢語句都已經執行成功。 php設計模式之介面卡模式
借鑑 適用性 原理 將要用到的角色分為以下幾種 target最早實現的介面,adaptee改善之後的介面,adapter對target和adapter進行適配,client呼叫介面 類介面卡模式 author mtg 目標角色 version 1.0 class target 目標點 public ...
PHP設計模式之介面卡模式
php設計模式之介面卡模式 1 介面卡模式的概念 介面卡設計模式只是將某個物件的介面適配為另乙個物件所期待的介面。2 uml靜態模型 3 單例模式舉例 今天從網路上爬了一些資料,爬下來的內容如下 所示,該內容在另一頁面直接顯示,這裡的爬蟲 就不寫了,只寫乙個模擬的效果。address 山東威海農副產...
PHP設計模式之 介面卡模式
介面卡要完成的功能很明確,引用現有介面的方法實現新的介面的方法。你的介面不改的話,我就利用現有介面和你對接一下吧。開 閉 原則,乙個軟體實體應當對擴充套件開放,對修改關閉 class toy describe 原有的介面 author nick abstract class toy class do...