PHP設計模式--適配器模式

來源:互聯網
上載者:User
聲明:本系列部落格參考資料《大話設計模式》,作者程傑。

適配器模式(有時候也稱封裝樣式或者封裝)將一個類的介面適配成使用者所期待的(適配器模式要解決的核心問題)。一個適配允許通常因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在一個已存在的類中。


類圖:

待適配(ForeignPlayer)角色:此角色的介面規則內部的介面規則不一致,但內部需要調用該角色的方法功能。

內部介面(IPlayer)角色:這是一個抽象角色,此角色給出內部期待的介面規則。

適配器(Adapter)角色:通過在內部封裝一個Adapter對象,把待適配介面轉換成目標介面,此角色為適配器模式的核心角色,也是適配器模式所解決問題的關鍵。


代碼:

";    }    function Defense()    {        echo "前鋒防禦
"; }}/**中鋒 * Class Center */class Center implements IPlayer{ function Attack() { echo "中鋒攻擊
"; } function Defense() { echo "中鋒防禦
"; }}//--------------待適配對象-----------/**姚明 外籍運動員 * Class Yaoming */class Yaoming{ function 進攻() { echo "姚明進攻
"; } function 防禦() { echo "姚明防禦
"; }}//------------適配器--------------/**適配器 * Class Adapter */class Adapter implements IPlayer{ private $_player; function __construct() { $this->_player=new Yaoming(); } function Attack() { $this->_player->進攻(); } function Defense() { $this->_player->防禦(); }}

用戶端測試代碼:

header("Content-Type:text/html;charset=utf-8");//------------------------原型模式測試代碼------------------require_once "./Adapter/Adapter.php";$player1=new Forward();echo "前鋒上場:
";$player1->Attack();$player1->Defense();echo "
";echo "姚明上場:
";$yaoming=new Adapter();$yaoming->Attack();$yaoming->Defense();

適用情境

1.介面中規定了所有要實現的方法

2.但要有一個實現此介面的具體類,只用到了其中的幾個方法,而其它的方法都是沒有用的。

注意事項

1.充當適配器角色的類就是實現已有介面的抽象類別

2.為什麼要用抽象類別:

此類是不要被執行個體化的。而只充當適配器的角色,也就為其子類提供了一個共同的介面,但其子類又可以將精力只集中在其感興趣的地方。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.