写点什么

结构型设计模式 - 适配器 Adapter

作者:菜皮日记
  • 2023-09-08
    北京
  • 本文字数:978 字

    阅读完需:约 3 分钟

简介

适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作

角色

  • Client 接口 / Target 目标接口

    用户使用的接口

  • Adaptee

    被适配的对象,原有方法不能直接给 client 使用

  • Adapter

    适配器,实现 Target 接口,将 Adaptee 的方法改造成兼容 client 的形式,供 client 使用

类图

图示,Adapter 持有 Service 对象实例,method 方法实现自 Client Interface,使 client 可以调用,method 内部逻辑则将 client 的入参转换后交给 service 处理

类图

代码

class Target{    public function request(): string    {        return "Target: The default target's behavior.";    }}
class Adaptee{    public function specificRequest(): string    {        return ".eetpadA eht fo roivaheb laicepS";    }}
class Adapter extends Target{    private $adaptee;
    public function __construct(Adaptee $adaptee)    {        $this->adaptee = $adaptee;    }
    public function request(): string    {        return "Adapter: (TRANSLATED) " . strrev($this->adaptee->specificRequest());    }}
function clientCode(Target $target){    echo $target->request();}
echo "Client: I can work just fine with the Target objects:\n";$target = new Target();clientCode($target);
$adaptee = new Adaptee();echo "Client: The Adaptee class has a weird interface. See, I don't understand it:\n";echo "Adaptee: " . $adaptee->specificRequest();
echo "Client: But I can work with it via the Adapter:\n";$adapter = new Adapter($adaptee);clientCode($adapter);
复制代码

output:

Client: I can work just fine with the Target objects:Target: The default target's behavior.Client: The Adaptee class has a weird interface. See, I don't understand it:Adaptee: .eetpadA eht fo roivaheb laicepSClient: But I can work with it via the Adapter:Adapter: (TRANSLATED) Special behavior of the Adaptee.
复制代码


用户头像

菜皮日记

关注

全干程序员 2018-08-08 加入

还未添加个人简介

评论

发布
暂无评论
结构型设计模式-适配器 Adapter_设计模式_菜皮日记_InfoQ写作社区