程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 適配器模式,php適配器模式

PHP 適配器模式,php適配器模式

編輯:關於PHP編程

PHP 適配器模式,php適配器模式


適配器模式(Adapter)模式:將一個類的接口,轉換成客戶期望的另一個類的接口。適配器讓原本接口不兼容的類可以合作無間。     【適配器模式中主要角色】
目標(Target)角色:定義客戶端使用的與特定領域相關的接口,這也就是我們所期待得到的
源(Adaptee)角色:需要進行適配的接口
適配器(Adapter)角色:對Adaptee的接口與Target接口進行適配;適配器是本模式的核心,適配器把源接口轉換成目標接口,此角色為具體類。   其實也就是你家牆上有一個兩口的插座(Adaptee),但你買了一個電風扇(Target)需要三個口的,這個時候你就需要一個插排(Adapter)。

 

【類適配器模式PHP示例】
類適配器使用的是繼承
/**
 * 目標角色
 */
interface Target {

    /**
     * 源類也有的方法1
     */
    public function sampleMethod1();

    /**
     * 源類沒有的方法2
     */
    public function sampleMethod2();
}

/**
 * 源角色
 */
class Adaptee {

    /**
     * 源類含有的方法
     */
    public function sampleMethod1() {
        echo 'Adaptee sampleMethod1 <br />';
    }
}

/**
 * 類適配器角色
 */
class Adapter extends Adaptee implements Target {

    /**
     * 源類中沒有sampleMethod2方法,在此補充
     */
    public function sampleMethod2() {
        echo 'Adapter sampleMethod2 <br />';
    }

}

class Client {

    /**
     * Main program.
     */
    public static function main() {
        $adapter = new Adapter();
        $adapter->sampleMethod1();
        $adapter->sampleMethod2();

    }

}

  

【對象適配器模式PHP示例】
對象適配器使用的是委派

/**
 * 目標角色
 */
interface Target {

    /**
     * 源類也有的方法1
     */
    public function sampleMethod1();

    /**
     * 源類沒有的方法2
     */
    public function sampleMethod2();
}

/**
 * 源角色
 */
class Adaptee {

    /**
     * 源類含有的方法
     */
    public function sampleMethod1() {
        echo 'Adaptee sampleMethod1 <br />';
    }
}

/**
 * 類適配器角色
 */
class Adapter implements Target {

    private $_adaptee;

    public function __construct(Adaptee $adaptee) {
        $this->_adaptee = $adaptee;
    }

    /**
     * 委派調用Adaptee的sampleMethod1方法
     */
    public function sampleMethod1() {
        $this->_adaptee->sampleMethod1();
    }

    /**
     * 源類中沒有sampleMethod2方法,在此補充
     */
    public function sampleMethod2() {
        echo 'Adapter sampleMethod2 <br />';
    }

}

class Client {

    /**
     * Main program.
     */
    public static function main() {
        $adaptee = new Adaptee();
        $adapter = new Adapter($adaptee);
        $adapter->sampleMethod1();
        $adapter->sampleMethod2();

    }

}

  類適配器采用“多繼承”的實現方式,帶來了不良的高耦合,所以一般不推薦使用。對象適配器采用“對象組合”的方式,更符合松耦合精神。

這裡還有一篇對對象適配器的很好的說明可以看一下http://www.knowsky.com/890188.html。我覺得我理解的也是一點點,以後再實戰中應用的話再補充。還有一點就是覺得Target為什麼是接口類,我覺得抽象類更靈活些。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved