<?php
class Message{
public function send(){
echo '阿里云发送短信';
}
public function push(){
echo '阿里云推送';
}
}
class AdaptMessage 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 '百度云发送短信';
}
public function transmission_push(){
echo '百度云推送';
}
}
$bdMessage = new BaiduyunMessage();
$adapt = new AdaptMessage($bdMessage);
$adapt->send();
- 这里我们是继承的Message类,因为Message类是之前已经写好的代码,里面可能有一些可以公用的方法,所以并没有做接口抽象。可以考虑在重构代码的时候实现提取一个抽象接口,但在这里只是为了演示适配器不一定只是能去针对接口,只要和原对象保持一致,不去继承什么也是可以的,毕竟我们是弱类型语言,如果是类似于Java的强类型,那么继承或者实现还是很有必要的(多态性)
- 组合式的适配器与装饰器类似,都会维护一个外部对象,装饰器更多的会使用原来的类中的方法,对其进行增加功能的操作,而适配器则很少去增加功能,而是直接替换掉
- Laravel中的Filesystem模块,有一个FilesystemAdapter类,我觉得没啥可说的了,很明显的告诉大家咱用了适配器模式,好好研究一下吧
- 当你想使用一个类,但他提供的内容跟你的业务又不太匹配的时候;或者你想创建一个类,可以与其他不相关的类或不可预见的类协同工作的时候,不妨试试适配器模式吧
感谢分享:mp.weixin.qq.com/s?__biz=MzI…