转自 http://www.cnblogs.com/fancing/p/6394206.html
将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作。
角色
Target适配目标,该角色定义把其他类转换为何种接口,也就是我们的期望接口。
Adaptee被适配者,就是需要被适配的接口。
Adapter适配器,其他的两个角色都是已经存在的角色,而适配器角色是需要新建立的,它用来对Adaptee与Target接口进行适配。
WEB应用
适配器模式最常见的应用为数据库应用,一个web应用通常可能会使用不同的数据库驱动程序,比如mysql、mysqli、pdo、sqlite等,而整个web应用当中不可能针对每个数据库驱动,编写多种程序,对于web应用程序来讲,需要的是统一外部实现,而数据库驱动的内部实现则不关心。
其实换成现实中的另一种说法:当你将程序完整的写结束时,你的客户突然说:听说pdo比mysql好,要不用pdo吧?客户笑眯眯的看着你,你傻乎乎的望着客户,哎,改吧!
总不见得要所有代码都修改一遍吧,这时候适配器模式就派上了用场!
1 /*驱动接口*/ 2 interface db_driver { 3 function connect(); 4 function query(); 5 } 6 7 /*mysql的数据库实现*/ 8 class db_mysql implements db_driver { 9 10 public function connect() { 11 /*具体代码实现*/ 12 } 13 14 function query($sql) { 15 /*具体代码实现*/ 16 } 17 } 18 /*pdo的数据库实现*/ 19 class db_pdo implements db_driver { 20 21 public function connect() { 22 /*具体代码实现*/ 23 } 24 25 function query($sql) { 26 /*具体代码实现*/ 27 } 28 } 29 /*定义适配器类*/ 30 class db_adapter { 31 32 private $db; 33 34 function __construct($db_obj) { 35 $this->db = $db_obj; 36 } 37 38 function connect() { 39 $this->db->connect(); 40 } 41 42 function query($sql) { 43 $this->db->query($sql); 44 } 45 } 46 /*客户端应用*/ 47 $db = new db_adapter(new db_mysql());