## 意图
> 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式很好理解,我们从生活中的例子来理解就行。
每个插座都提供了基本的功能:插入与充电
```php
insert("手机充电器");
$socket->charge();
}
$socket = new ThreeSocket();
client($socket); // 由于手机充电器无法插入到三孔插座,所以无法充电
```
不难看出,我们要适配的插入两孔插座这个接口
```php
insertTwoHold = $insertTwoHold
}
public function insert()
{
echo "将三孔转化为两孔";
$this->insertTwoHold->insert();
}
}
```
有了适配器时候,就可以进行充电了,并且,对于客户端而言,不需要做出任何改动。
```php
insert("手机充电器");
$socket->charge();
}
$socket = new SocketAdapter();
client($socket);
```
通过该例子,我们可以看出适配器的典型应用场景。因为我们的三孔插座接口不符合我们的充电要求,你又没办法去修改它,只能通过电源适配器来兼容手机充电。而对于一些第三方接口或者历史遗留代码也同样面临这样的问题,你无法直接修改接口,只能采取适配器来兼容接口。
## 实现
![image.png](https://cdn.learnku.com/uploads/images/202003/08/9064/UFI6agnldD.png!large)
Target,类似于插座,也就是与我们的客户端(手机充电器)有关的特性领域的相关接口
```php
adaptee = $adaptee;
}
public function request(): string
{
return "Adapter: (TRANSLATED) " . strrev($this->adaptee->specificRequest());
}
}
```
## 总结
适配器实现了开闭原则,在不修改客户端代码的情况下,可以添加新的类型的适配器。
适配器的使用场景:现有的服务接口既无法修改(第三方、历史遗留),又满足不了客户端的接口需求,这时候,我们需要根据客户端的接口需求创建对应的适配器。