适配器(Adapter)模式

简介: 适配器(Adapter)模式

 定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作

一. 适配器模式的两种形式:适配器模式有类的适配器模式和对象的适配器模式两种

1. 类的Adapter模式结构图

image.gif编辑

图2 对象的Adapter模式结构图

image.gif编辑

二. 类的Adapter模式的结构

我们还是以汽车类型为例子说明Adapter模式。现在有这样一个场景:假设我们在软件开发中要使用一个不同的汽车工厂实现,该汽车工厂实现有BMW和BYD两种方式,它提供给我们的API接口是Drive()方法,使用方法如下:

car.Drive("BMW!");

当软件系统开发进行到一半时,要生产BYD的模式进行生产时,使用方法如下:

car.Drive("BYD!");

image.gif编辑

这时也许我们会想到修改现在的汽车生产工具的API接口,但是由于版权等原因我们不能够修改它的源代码,此时Adapter模式便可以派上用场了

image.gif编辑

实现代码如下:

public class BMWAdapter:BMWCar,ICarTarget
{
    public void Drive()
    {
        Drive();
    }
}
public class BYDCarAdapter:BYDCar,ICarTarget
{
    public void Drive()
    {
        this.Drive();
    }
}

image.gif

public class App
{
    public static void Main()
    {
        ICarTarget car= new BMWCarAdapter();
        car.Drive("BMW..");
        ICarTarget car= new BYDCarAdapter();
        car.Drive("BYD..");
    }
}

image.gif

三. 对象的Adapter模式的结构

image.gif编辑

实现代码如下:

public class CarAdapter:ICarTarget
{
    private CarAdaptee _adaptee;
    public CarAdapter(CarAdaptee adaptee)
    {
        this._adaptee = adaptee;   
    }
    public void Write()
    {
        _adaptee.Drive();
    }
}

image.gif

与类适配器相比较,可以看到最大的区别是适配器类的数量减少了,不再需要为每一种具体的方式来创建一个适配器类。同时可以看到,引入对象适配器后,适配器类不再依赖于具体的BMWCar类和BYDCar类,更好的实现了松耦合。

再看一下客户端程序的调用方法:

public class App
{
    public static void Main()
    {
        ICarTarget car= new CarAdapter(new BMWCar());
        car.Drive("BMW..");
        ICarTarget  car= new CarAdapter(new BYDCar());
        car.Drive("BYD..");
    }
}

image.gif

文章下方有交流学习区!一起学习进步!也可以前往官网,加入官方微信交流群

创作不易,如果觉得文章不错,可以点赞收藏评论

你的支持和鼓励是我创作的动力❗❗❗

官网Doker 多克官网;官方旗舰店Doker 多克官方旗舰店

目录
相关文章
|
8月前
适配器的作用
适配器的作用
102 0
|
9月前
|
算法 C++
C++函数适配器
C++函数适配器
|
XML SQL 前端开发
Adapter基础讲解
这一节我们要讲的UI控件都是跟Adapter(适配器)打交道的,了解并学会使用Adapter很重要, Adapter是用来帮助填充数据的中间桥梁,简单来说就是:将各种数据以合适的形式显示到view上,提供 给用户看!
404 0
|
前端开发 搜索推荐 测试技术
端口和适配器架构
端口和适配器架构
端口和适配器架构
|
设计模式
结构型-Adapter
适配器模式的原理与实现 适配器模式 的英文翻译是 Adapter Design Pattern。顾名思义,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。 原理很简单,我们再来看下它的代码实现。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。具体的代码实现如下所示。其中,ITarget 表示要转化成的接口定义。Adaptee 是一组不兼容 ITa
94 0
结构型-Adapter
|
API 数据处理 Apache
适配器模式(Adapter)
一 概述 定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。
835 0