/** * 目標角色 */ 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