借鑑
適用性:
原理:將要用到的角色分為以下幾種:target最早實現的介面,adaptee改善之後的介面,adapter對target和adapter進行適配,client呼叫介面
<?php
/**
* 類介面卡模式
*@author mtg
* *//**
* 目標角色
*@version 1.0
*/
class target
/**
* 目標點
*/public function world()
} /**
* client程式 呼叫target所定義的介面
* */
class client
} client::main();
?>
target已經明確指出hello()方法會在未來的版本中改進,甚至不被支援或者淘汰。接下來,現在假設第二版的target已經發布。乙個全新的greet()方法代替了hello()。
<?php
/**
* 類介面卡模式
*@author guisu
* *//**
* 目標角色
*@version 2.0
*/
class target
public function world()
}
如果我們繼續使用原來的client**,肯定會報錯,找不到hello方法。
針對api「公升級」的解決辦法就是建立乙個介面卡(adapter)。
<?php
/**
* 類介面卡模式
*@author mtg
* *//**
* 目標角色
*@version 2.0
*/
inte***ce target
/**
* 源角色:被適配的角色,新的介面類
*/
class adaptee
/**
* 加入新的方法
*/public function greet()
} /**
* 類介面卡角色 即繼承adaptee又實現target,現在的adapter有三個方法,分別是world(),greet(),和hello()方法,並且hello方法就是新增加的greet方法,此時,客戶端**是不需要改變的,只需將需要呼叫的類替換掉
*/
class adapter extends adaptee implements target
} /**
* 客戶端程式
* */
class client
} client::main();
?>
<?php
/**
* 物件介面卡模式
*@author guisu
* *//**
* 目標角色
*@version 2.0
*/
inte***ce target
/**
* 源角色:被適配的角色
*/
class adaptee
/**
* 加入新的方法
*/public function greet()
} /**
* 在adapter中持有adptee的物件,此時adapter類就可以使用adaptee的介面,adapter類再通過介面轉換,使客戶端可以直接使用
*/
class adapter implements target
/**
* 通過介面轉換,將greet()方法轉換為hello()
*/public function hello()
/**
* 通過介面轉換,將舊版本的world()方法轉換為新版本的world的方法
*/public function world()
} /**
* 客戶端程式
* */
class client
} client::main();
?>
PHP設計模式之介面卡模式
php設計模式之介面卡模式 1 介面卡模式的概念 介面卡設計模式只是將某個物件的介面適配為另乙個物件所期待的介面。2 uml靜態模型 3 單例模式舉例 今天從網路上爬了一些資料,爬下來的內容如下 所示,該內容在另一頁面直接顯示,這裡的爬蟲 就不寫了,只寫乙個模擬的效果。address 山東威海農副產...
PHP設計模式之 介面卡模式
介面卡要完成的功能很明確,引用現有介面的方法實現新的介面的方法。你的介面不改的話,我就利用現有介面和你對接一下吧。開 閉 原則,乙個軟體實體應當對擴充套件開放,對修改關閉 class toy describe 原有的介面 author nick abstract class toy class do...
PHP設計模式之介面卡模式
header content type text html charset utf 8 介面卡模式演示 target適配目標 idatabase介面 adaptee被適配者 mysql和mysql i postgresql的資料庫操作函式 adapter介面卡 mysql類和mysql i post...