<?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