设计模式 - 适配器模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式 - 适配器模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
場景
- 現實場景:國內電壓是 220v,外國部分國家是 110v,如果去出差,會需要攜帶兩個電源適配器,以應對這兩種不同的電壓。
- 數據庫場景:每種編程語言都需要支持多種數據庫,通常會抽象一層數據庫連接層,例如 Java 的 JDBC,PHP 的 PDO。數據庫連接層對應用開發人員提供標準接口,屏蔽了數據庫底層的差異。數據庫提供的接口則是千差萬別的。所以,數據庫連接層又拆分為兩層,一層對外提供服務,一層用于連接不同的數據庫。
- 具體代碼場景:想使用一個已經完成的類,但是它的接口不符合需求。
假設已經有可以提供服務的目標類,客戶類訪問目標類時,發現其提供的接口不滿足需求。此時在客戶類和目標類中間加一層抽象,使不能直接交互的類可以一起工作。
定義一個包裝類,包裝不兼容接口的對象,這個包裝類指的就是適配器(Adapter),它所包裝的對象就是適配者(Adaptee),即被適配的類。
模式定義
將一個接口轉換成客戶希望的另一個接口,使接口不兼容的那些類可以一起工作。
模式特點
適配器模式包含四個角色:
Target:目標抽象類,定義接口標準,客戶端可以直接調用
Adapter:適配器類,適配 Adaptee 與 Target,使其可以協同工作
Adaptee:適配者類,需要進行適配的接口
Client:客戶類
適配器模式包括兩種:
- 類結構型適配器:繼承關系,Adapter 同時繼承 Target 和 Adaptee 類。
- 對象結構型適配器:關聯關系,Adapter 繼承 Target,關聯 Adaptee。
優點
- 符合“開閉原則”,可以用配置文件方便地更換適配器
- 解耦,通過引入一個適配器類來重用現有的適配者類
類適配器模式優點:
- Adapter 是 Adaptee 的子類,因此可以在 Adapter 中置換一些 Adaptee 的方法,使得適配器的靈活性更強。
對象適配器模式優點:
- 允許一個 Adapter 與多個 Adaptee 同時工作
缺點
類適配器模式的缺點:
- 對于不支持多繼承的語言,一次最多只能適配一個 Adaptee,其使用有一定的局限性,不能將 Adaptee 和它的子類都適配到目標接口。當我們想要匹配一個類以及所有它的子類時,類 Adapter 不能勝任工作。
對象適配器模式的缺點:
- 重定義 Adaptee 的行為比較困難。
PHP 代碼示例
類適配器模式
<?phpinterface Target {public function query(); }class Adapter extends Adaptee implements Target {public function del() {echo "can not delete<br/>";} }class Adaptee {public function query() {echo "Adaptee query<br/>";} }class Client {public function test() {$adapter = new Adapter();$adapter->query();$adapter->del();} }$c = new Client(); $c->test();輸出:
Adaptee query can not delete對象適配器模式
<?phpinterface Target {public function query(); }class Adapter implements Target {private $adaptee;public function __construct(Adaptee $adaptee) {$this->adaptee = $adaptee;}public function query() {echo $this->adaptee->query();}public function del() {echo "can not delete<br/>";} }class Adaptee {public function query() {echo "Adaptee query<br/>";} }class Client {public function test() {$adaptee = new Adaptee();$adapter = new Adapter($adaptee);$adapter->query();$adapter->del();} }$c = new Client(); $c->test();輸出:
Adaptee query can not delete轉載于:https://www.cnblogs.com/kika/p/10851563.html
總結
以上是生活随笔為你收集整理的设计模式 - 适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之CentOS(三十六)-
- 下一篇: java中的构造方法,this、supe