适配往往发生在两个已经存在的东西需要对接但是不兼容的情况下,相似的,适配器模式就是为了解决已有类和新类接口不统一的情况。
假设我们原先一个接口如下:
//定义一个产品在线接口
interface onLine{
//接口中包含一个联网方法
function onLineMethod();
}
//产品
class product implements onLine{
function onLineMethod(){
echo "原来的接口";
}
}
这是我们的产品原本用来联网的接口,但是现在公司和别的公司合作,要改成使用别的公司提供的接口,接口定义如下:
//这是别的公司提供的接口
interface onLineA{
function howToDo();
}
假设现在接口的改动对两个公司的造成的影响很大的,那么这时候,我们就可以通过定义一个适配器类来处理这种状况。
我们的适配器:
class adapter implements onLineA{
private $original;
public function __construct($o){
$this->original=$o;
}
public function howToDo(){
$this->original->onlineMethod();
}
}
当我们产品用联网时,这时候只需要调用:
$adap=new adapter(new product());
$adap->howToDo();
总结
很重要的一点,适配器模式适用于统一接口的代价过大的情况下所采取的亡羊补牢的措施,当统一接口代价小时,还是尽量重构统一接口,以方便客户端调用,更好的是在设计的前提就应该考虑好接口的问题,防范于未然,不可滥用适配器模式。