擴充卡模式核心思想:把對某些相似的類的操作轉化為一個統一的“接口”(這裡是比喻的說話)--擴充卡,或者比喻為一個“界面”,統一或屏蔽了那些類的細節。擴充卡模式還構造了一種“機制”,使“适配”的類可以很容易的增減,而不用修改與擴充卡互動的代碼,符合“減少代碼間耦合”的設計原則。
我們還可以友善的添加進 sqlite 等資料庫操作的類,“插入”擴充卡中,立即就可以用操作 mysql 和 oracle 相同的方法來操作 sqlite 資料庫了。
//擴充卡類:
//定義了4個操作所有資料庫的方法

<?php
class db_adapter {
private $db;
function __construct($db_obj) {
$this->db = $db_obj;
}
function select_record() {
$this->db->select ();
function insert_record() {
$this->db->insert ();
function update_record() {
$this->db->update ();
function delete_record() {
$this->db->delete ();
}
//mysql 資料庫操作類:
class mysql {
private $obj_mysql;
function __construct() {
$obj_mysql = ......
;
function select() {
$obj_mysql->mysql_select ();
function insert() {
$obj_mysql->mysql_insert ();
function update() {
$obj_mysql->mysql_update ();
function delete() {
$obj_mysql->mysql_delete ();
//oracle 資料庫操作類:
class oracle {
private $obj_oracle;
$obj_oracle = ......
$obj_oracle->oracle_select ();
$obj_oracle->oracle_insert ();
$obj_oracle->oracle_update ();
$obj_oracle->oracle_delete ();
//操作 mysql 資料庫:
$obj = new db_adapter(new mysql())
$obj->select_record ();
$obj->insert_record ();
$obj->update_record ();
$obj->delete_record ();
//操作 oracle 資料庫:
$obj = new db_adapter(new oracle())
?>
要求:mysql、oracle 類,有相同名字、相同個數的方法。方法内部實作了各自的操作資料庫的代碼。轉換就是在這裡完成的。
增加新的資料庫操作:構造新的類,有相同名字、相同個數的方法。方法内部實作不被關心(被屏蔽) - 不同的資料庫實作不同。
小缺點:新的類,可能因為疏忽,導緻方法名字不合要求、個數不同。
為了減少出錯的可能,可以改進一下。方法就是定義一個接口,作為模闆來繼承,達到規範化。
db_adapter 類裡的方法,隻需要使用 interface db_driver 裡函數即可。

//定義一個接口,
interface db_driver {
function select();
function insert();
function update();
function delete();
// 資料庫操作類,比如 mysql,oracle 必須實作 db_driver 接口的同名方法,進而進行了規範。
class mysql implements db_driver {
//這裡省略的代碼同前邊的 mysql 類
class oracle implements db_driver {
//這裡省略的代碼同前邊的 oracle 類
?>