【類適配器模式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為什麼是接口類,我覺得抽象類更靈活些。