適配器模式(Adapter)模式:將一個類的接口,轉換成客戶期望的另一個類的接口。適配器讓原本接口不兼容的類可以合作無間。
【適配器模式中主要角色】
目標(Target)角色:定義客戶端使用的與特定領域相關的接口,這也就是我們所期待得到的
源(Adaptee)角色:需要進行適配的接口
適配器(Adapter)角色:對Adaptee的接口與Target接口進行適配;適配器是本模式的核心,適配器把源接口轉換成目標接口,此角色為具體類。
目標(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。
