对外统一,将一些截然不同的函数接口封装成统一的api,最简单的例子就是DB类了,有mysql,pdo,项目中同时有几种数据库存在,因为有各自的api,所以适配器模式是将几种不同的数库封装成统一的api,对外就是统一的方式调用<br />各自的api 接口名称不一样,通过适配器模式,统一成一个名称,对然调用一致<br />很经典的例子,插座,电压不一样,电源适配器,跟适配器模式差不多,不符合要求,加个适配器<br />将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本接口不兼容的而不能一起工作的类,一起工作
//基本的发短信类
class Message{
public function send(){
echo "阿里云发送短信!" . PHP_EOL;
}
public function push(){
echo "阿里云发送推送!" . PHP_EOL;
}
}
//接口不一致的极光类
class JiguangMessage{
public function send_out_msg(){
echo "极光发送短信!" . PHP_EOL;
}
public function push_msg(){
echo "极光发送推送!" . PHP_EOL;
}
}
//适配器极光,统一接口名称
class JiguangSDKAdapter extends Message{
private $message;
public function __construct($message){
$this->message = $message;
}
public function send(){
$this->message->send_out_msg();
}
public function push(){
$this->message->push_msg();
}
}
//接口不一致百度云类
class BaiduYunMessage{
public function transmission_msg(){
echo "百度云发送短信!" . PHP_EOL;
}
public function transmission_push(){
echo "百度云发送推送!" . PHP_EOL;
}
}
//适配器百度云,统一接口名称
class BaiduYunSDKAdapter extends Message{
private $message;
public function __construct($message){
$this->message = $message;
}
public function send(){
$this->message->transmission_msg();
}
public function push(){
$this->message->transmission_push();
}
}
$jiguangMessage = new JiguangMessage();
$baiduYunMessage = new BaiduYunMessage();
$message = new Message();
// 原来的老系统发短信,使用阿里云
$message->send();
$message->push();
// 部分模块用极光发吧
$jgAdatper = new JiguangSDKAdapter($jiguangMessage);
$jgAdatper->send();
$jgAdatper->push();
// 部分模块用百度云发吧
$bdAatper = new BaiduYunSDKAdapter($baiduYunMessage);
$bdAatper->send();
$bdAatper->push();
适配器主要是维护一个外部对象,很少去增加功能,一般是直接替换,