介面卡模式(有時候也稱包裝樣式或者包裝)將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起。
其實就是通過乙個轉換類,這個轉換類裡面有乙個方法,我們用這個轉換方法將原來的介面轉換成需要的介面
角色
如程式資料庫有關聯mysql、mysqli、pdo、sqlite、postgresql等操作,而你需要根據情況換資料庫操作時,可以使用介面卡模式統一介面,這樣**中除了資料庫配置之外,就不需要做而外的更改。
同理cache(快取)的場景也是,無論使用memcache還是redis等,在更換的時候都會很方便,節約時間。
注:在一些流行框架中都可以看到此模式,詳情請自行參閱框架原始碼。
1執行結果:<?php
2header('content-type:text/html;charset=utf-8');3/*
*4* 介面卡模式演示**
5* target適配目標: idatabase介面
6* adaptee被適配者: mysql和mysql_i、postgresql的資料庫操作函式
7* adapter介面卡 :mysql類和mysql_i、postgresql類8*/
910/**
11* inte***ce idatabase 適配目標,規定的介面將被適配物件實現
12* 約定好統一的api行為
13*/
14inte***ce
idatabase
1523
24/**25
* class mysql 介面卡
26*/
27class
mysql
implements
idatabase
2846
47/**48
* 實現查詢方法49*
50* @param $sql 需要被查詢的sql語句
51* @return mi
52*/
53public
function query($sql)54
5758
//實現關閉方法
59public
function
close()
6063}64
65/**66
* class mysql 介面卡
67*/
68class mysql_i implements
idatabase
6986
87/**88
* 實現查詢方法89*
90* @param $sql 需要被查詢的sql語句
91*/
92public
function query($sql)93
9697
//實現關閉
98public
function
close()
99102
}103
104/*
*105
* class postgresql 介面卡
106*/
107class postgresql implements
idatabase
108124
125/*
*126
* 實現查詢方法
127*
128* @param $sql 需要被查詢的sql語句
129*/
130public
function query($sql
)131
134135
//實現關閉方法
136public
function
close()
137140
}141
142143/**
144* 客戶端使用演示
145* 這裡以mysql為例
146* 只要模式設計好,不論有多少種資料庫,實現和呼叫方式都是一樣的
147* 因為都是實現的同乙個介面,所以都是可以隨意切換的
148*/
149150
$host = 'localhost';
151$username = 'root';
152$password = 'root';
153$database = 'mysql';
154155
//$client = new postgresql();
156//$client = new mysql();
157$client = new
mysql_i();
158$client->connect($host, $username, $password, $database
);159
$result = $client->query("select * from db");
160while ($rows = mysqli_fetch_array($result
)) 163
$client->close();
1從以上結果可看出,資料庫連線以及查詢語句都已經執行成功。array(44)
PHP設計模式(介面卡模式)
設計動機 假如我們又這樣軟體系統,我們希望它能夠和乙個新的庫搭配使用,但是這個庫所提供的介面與我們的軟體系統不相容,我們不想改變現有 就能解決這個問題,怎麼辦?這個時候我們就需要將這個新的庫介面轉換成我們所需要的介面,這就是介面卡模式設計動機。模式定義 介面卡模式就是將乙個類的介面,轉換成客戶期望的...
PHP設計模式 介面卡模式
宣告 本系列部落格參考資料 大話設計模式 作者程杰。介面卡模式 有時候也稱包裝樣式或者包裝 將乙個類的介面適配成使用者所期待的 介面卡模式要解決的核心問題 乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在乙個已存在的類中。類圖 待適配 foreignplaye...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...