23种设计模式-适配器模式


23种设计模式-适配器模式

概述

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作

适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少。

结构

适配器(Adapter)模式包含下面角色:

  • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口
  • 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口
  • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口格式访问适配者

实现

/**
 * 目标接口
 */
interface SDCard
{
    public function readSD();
    public function writeSD();
}

/**
 * 适配者接口
 */
interface TFCard
{
    public function readTF();
    public function writeTF();
}

/**
 * 适配者实现类
 */
class TfCardImpl implements TFCard
{

    public function readTF()
    {
        echo '读tf';
    }

    public function writeTF()
    {
        echo '写tf';
    }
}

class SDAdapterTF implements SDCard
{
    public function __construct(protected TFCard $tfCard)
    {
    }

    public function readSD()
    {
        $this->tfCard->readTF();
    }

    public function writeSD()
    {
        $this->tfCard->writeTF();
    }
}

class Computer
{
    public function readCard(SDCard $sdcard)
    {
        return $sdcard->readSD();
    }
}

// 测试
$computer = new Computer();
$adapter = new SDAdapterTF(new TfCardImpl());
$computer->readCard($adapter);

文章作者: 我若为侠
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我若为侠 !
 上一篇
23种设计模式-装饰模式 23种设计模式-装饰模式
23种设计模式-装饰模式概述装饰模式是指在不改变现有对象结构的情况下,动态的给该对象增加一些职责(即增加其额外功能)的模式 结构装饰模式分为以下角色: 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象 具体
下一篇 
23种设计模式-代理模式 23种设计模式-代理模式
23种设计模式-代理模式概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 结构代理模式分为三种角色: 抽象主题类:通过接口或抽象类声明真实
  目录