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示例】
對象適配器使用的是委派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();

    }

}

  類適配器採用「多繼承」的實現方式,帶來了不良的高耦合,因此通常不推薦使用。對象適配器採用「對象組合」的方式,更符合鬆耦合精神。html

這裏還有一篇對對象適配器的很好的說明能夠看一下http://www.knowsky.com/890188.html。this

相關文章
相關標籤/搜索