在php設計模式(七):設計模式分類中我們提到過結構設計模式(structural patterns),結構設計模式專注於設計物件(object)和例項(instance)的構建、組合過程。
結構設計模式包括下面七種設計模式:
介面卡(adapter)
橋接(bridge)
合成(composite)
裝飾(decorator)
外部(facade)
輕量(flyweight)
**(proxy)
請無視拗口的中文翻譯。結構設計模式著重於低耦合、高復用、高可維護性、高拓展性的設計原則。
介面卡模式是一種利用介面卡將現有的實現,適配到已有介面的設計模式,最常見的例子就是變壓器,將已有的5v輸入的電器,通過變壓器,適配到220v的電源插座。
介面卡模式利用php設計模式(四):繼承中我們提到過的繼承(inheritance),以及php設計模式(六):mvc中我們提到過的元件(composition)來進行模式設計。
相比繼承,元件可用性高,低耦合,冗餘度低,因此推薦採用元件的模式來進行設計。
簡單來說,當你的實現和需要的介面,都無法修改的時候。
例如,你需要給甲方已有的系統做標準的相容,標準不可修改,甲方的系統也不可修改,這個時候你就需要介面卡的設計模式了。
對於web程式設計來說,將你現有的實現,和三方庫結合起來,就需要使用介面卡模式。
簡單來說,就是:
<?php
class adapter extends yourclass implements otherinte***ce
?>
還是用前面的鯨魚和鯉魚的例子來說明如何使用介面卡,假設我們已經實現了鯨魚類和鯉魚類:
<?php
class whale
public function eatfish()
}class carp
public function eatmoss()
}?>
假設我們現在需要建乙個動物館,有eatfish()和eatmoss()介面,動物館介面如下:
<?php
inte***ce animal
?>
但是我們不能修改whale和carp類,這裡就需要使用介面卡了,建立兩個介面卡:
<?php
class whaleadapter extends whale implements animal
public function eatmoss()
}class carpadapter extends carp implements animal
public function eatfish()
}?>
然後是呼叫**:
<?php
$whaleadapter = new whaleadapter();
$whaleadapter->eatfish();
$whaleadapter->eatmoss();
$carpadapter = new carpadapter();
$carpadapter->eatmoss();
$carpadapter->eatfish();
?>
執行一下:
whale eat fish.
whale don't eat moss.
carp eat moss.
carp don't eat moss.
還是使用鯨魚和鯉魚的例子,不過這個時候介面卡變成了:
<?php
class whaleadapter implements animal
public function eatfish()
public function eatmoss()
}class carpadapter implements animal
public function eatfish()
public function eatmoss()
}?>
其他的地方和使用繼承的介面卡模式一樣,這裡不再贅述。
介面卡模式在不修改現有**的基礎上,保留了架構。使用繼承的介面卡和使用元件的介面卡各有利弊,繼承的類冗餘度/空間複雜度偏高,元件的呼叫棧/時間複雜度偏高,應該結合實際情況選擇。
PHP設計模式(介面卡模式)
設計動機 假如我們又這樣軟體系統,我們希望它能夠和乙個新的庫搭配使用,但是這個庫所提供的介面與我們的軟體系統不相容,我們不想改變現有 就能解決這個問題,怎麼辦?這個時候我們就需要將這個新的庫介面轉換成我們所需要的介面,這就是介面卡模式設計動機。模式定義 介面卡模式就是將乙個類的介面,轉換成客戶期望的...
php設計模式介面卡模式
介面卡模式 有時候也稱包裝樣式或者包裝 將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起。其實就是通過乙個轉換類,這個轉換類裡面有乙個方法,我們用這個轉換方法將原來的介面轉換成需要的介面 角色 如程式資料庫有關聯mysql mysqli pdo sql...
PHP設計模式 介面卡模式
宣告 本系列部落格參考資料 大話設計模式 作者程杰。介面卡模式 有時候也稱包裝樣式或者包裝 將乙個類的介面適配成使用者所期待的 介面卡模式要解決的核心問題 乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在乙個已存在的類中。類圖 待適配 foreignplaye...