标签:设计模式 适配器模式
<?php /** * 2.1 适配器模式 * 解决的问题: * 如果有一个类的功能与现有的一个类的功能相似, * 但调用接口不同,可以使用此模式来统一调用接 * 口。 * 解决方案: * 将一个类的接口转换成另外一个客户希望 * 的接口。使得原本由于接口不兼容而不能 * 一起工作的那些类可以一起工作。 * * 此模式包含是哪个角色: * 1. 抽象目标角色 * 职责:用于规范具体目标类,也是客户端 * 能调用的类的接口。 * 2. 具体目标角色 * 职责:客户端实际要访问的类. * 3. 需要被适配(兼容接口)的角色 * * 4. 适配器角色 * 职责:它是属于具体目标角色。但它的目的 * 是为了适配第3个角色,以保证客户端 * 调用的是统一的接口。 * 优点: * 1. 将目标类和适配者类解耦 * 2. 增加了类的透明性和复用性,将具体的实 * 现封装在适配者类中,对客户端来说是透 * 明的,而且提高了适配者的复用性。 * 3. 灵活性和扩展性都非常好,符合开闭原则。 * 缺点: * 使用场景: * 1. 希望复用一些现存的类,但是接口又与复用 * 环境要求不一致。 * 2. 此模式的使用有点“亡羊补牢”的感觉,是前 * 设计过程中就应该通过重构统一接口来避免的 * */ /** * 抽象目标角色 * 球员类,包含两个方法:1. 进攻;2. 防守 */ abstract class Player{ abstract public function attack(); // abstract public function defense(); } /** * 具体目标角色 * 中锋球员 */ class Center extends Player{ public function attack(){ echo ‘进攻――英语‘; } } /** * 需要被适配的类 * 中锋球员 */ class ForeignCenter { public function attack(){ echo ‘进攻――中文‘; } } /** * 适配器类 * 翻译者 */ class Translator extends Player{ private $adaptee; public function __construct(){ $this->adaptee=new ForeignCenter(); } public function attack(){ $this->adaptee->attack(); } } $t1=new Translator(); $t1->attack(); ?>
本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614774
标签:设计模式 适配器模式
原文地址:http://noican.blog.51cto.com/4081966/1614774