PHP设计模式--适配器模式

39 阅读1分钟
<?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…