对外统一,将一些截然不同的函数接口封装成统一的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();
适配器主要是维护一个外部对象,很少去增加功能,一般是直接替换,