在前幾篇文章中,我們已經詳細介紹了設計模式的特性,並深入剖析了四種創建型模式。創建型模式主要負責物件實例的建立方式,接下來我們將進入結構型模式的領域。
結構型模式關注類別與物件的內部結構以及外部組合關係。它們透過優化程式架構,解決模組之間的耦合問題,使系統更具彈性與可維護性。
定義:將一個類別的介面轉換成客戶端期望的另一個介面。適配器模式讓原本因介面不相容而無法合作的類別能夠協同工作。
適用場景:
以下範例展示如何將舊版 User 類別適配至新版 UserInterface 介面:
// 舊版程式碼
class User {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
// 新版開放平台標準介面
interface UserInterface {
public function getUserName();
}
class UserInfo implements UserInterface {
protected $user;
public function __construct($user) {
$this->user = $user;
}
public function getUserName() {
return $this->user->getName();
}
}
// 使用示例
$oldUser = new User('張三');
echo $oldUser->getName() . "\n";
$newUser = new UserInfo($oldUser);
echo $newUser->getUserName() . "\n";
此處採用組合(Composition)而非繼承:UserInfo 內部持有 User 物件參考。這樣做符合「合成/聚合復用原則」,保持模組間鬆耦合。若改用繼承(UserInfo extends User),雖然也能達到相同功能,但會導致高耦合,父類別變動會直接影響子類別。
以上就是 PHP 設計模式中結構型模式——適配器模式的核心內容。若有疑問,歡迎留言交流!