当对象不太符合要求的时候,给他加一个适配器呗!!(这个模式一直以来都有一个很经典的例子,那就是插座!没错,当我们从国外买回来电器,或者旅游出差去国外的时候,经常会需要一个电源适配器,因为我国的电压标准是220伏,而其他国家则有110伏的标准。而这个电源适配器正是适配器模式的一种标志。)
各位大拿在对接信息、支付类的接口时,经常会使用这些平台提供的SDK。特别是有了Composer之后,安装SDK就更加的方便了,但是,又有一个严重的问题,这帮人做的SDK虽说功能实现大同小异,但命名可是千差万别啊!!我们的系统原来一直使用的阿里云的业务,但是这回要增加极光和百度云的信息功能,一来做个后备,二来根据不同业务使用不同的接口达到安全或节约的目的,有没有办法统一一下他们对外的接口,让我们使用他们的SDK时能够非常方便的和之前使用大家都已经很习惯的阿里云的接口一样呢?当然有,给他们各自都上个适配器呗,实例化的时候大不了外面再套个工厂返回不同的适配器就好啦,只要适配器里的实现方法和阿里云一样就OK啦!
<?php class Message{ public function send(){ echo "阿里云发送短信!" . PHP_EOL; } public function push(){ 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 JiguangMessage{ public function send_out_msg(){ echo "极光发送短信!" . PHP_EOL; } public function push_msg(){ 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(); } } class BaiduYunMessage{ public function transmission_msg(){ echo "百度云发送短信!" . PHP_EOL; } public function transmission_push(){ echo "百度云发送推送!" . PHP_EOL; } } $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();
说明
链接:https://juejin.cn/post/6844903925800239111