什麼是適配器:
適配器設計模式只是將某個對象的介面適配為另一個對象所期望的介面。
設計情景:
假如我們原始的有一個UserInfo的類,提供使用者資訊的類,早起設計該類的時候,只實現了一個getUserName擷取使用者名稱的方法。
我們的MyOldObject類中,將從UserInfo這個類中擷取使用者資訊,並且輸出使用者名稱
隨著時間的推移,我們舊的UserInfo這個類只提供的擷取使用者名稱的方法,已經沒法滿足需求,我們同時需要擷取使用者的年齡等資訊。
為了不改變原本UserInfo這個類,我們就繼承UserInfo,建立一個UserInfoAdapter類,實現getAge擷取年齡這樣的方法。
在我們的MyNewObject新的類中,我們執行個體化UserInfoAdapter,列印出使用者姓名和年齡。
這樣,隨著我們的擴充,我們沒有改變原先UserInfo這個類和使用這個類的介面,我們通過適配的方法,將UserInfo類擴充出來
代碼:UserInfo類,實現getUserName方法
[php]
//早期的一個使用者類,只實現擷取使用者名稱的方法
class UserInfo {
public function getUserName() {
return 'initphp';
}
}
代碼:MyOldObject類,從UserInfo類中擷取資訊,輸出使用者名稱
[php]
include_once("UserInfo.php");
class MyOldObject {
public function write() {
$UserInfo = new UserInfo;
echo $UserInfo->getUserName();
}
}
$a = new MyOldObject;
$a->write();
代碼:UserInfoAdapter類,隨著時間推移,項目需求在變化,UserInfo類無法滿足需求,我們做了UserInfo類的適配器,滿足新功能的需求
[php]
include_once("UserInfo.php");
class UserInfoAdapter extends UserInfo{
public function getUserAge() {
return 28;
}
public function getUser() {
return array(
'username' => $this->getUserName(),
'age' => $this->getUserAge()
);
}
}
代碼:MyNewObject類,新功能的類,需要列印出使用者年齡和姓名,UserInfo類無法滿足需求,需要調用UserInfoAdapter適配器這個類
[php]
include_once("UserInfoAdapter.php");
class MyNewObject {
public function write() {
$UserInfoAdapter = new UserInfoAdapter;
print_r($UserInfoAdapter->getUser());
}
}
$a = new MyNewObject;
$a->write();
作者:initphp
http://www.bkjia.com/PHPjc/478142.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478142.htmlTechArticle什麼是適配器: 適配器設計模式只是將某個對象的介面適配為另一個對象所期望的介面。 設計情景: 假如我們原始的有一個UserInfo的類,提...