栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

结构型模式-适配器模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

结构型模式-适配器模式

一:定义

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

适配器Adapter包含的主要角色
  • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。标准的交流电源插头。
  • 适配者(Adaptoo)类:它是被访问和适配器的现存组件库中的组件接口。欧洲墙视插座。
  • 适配器(Adapter)类:它是一个转换器,通过继承或者引用适配者对象,把适配者接口转成目标接口,让客户按目标接口的格式访问适配器。交流电适配器。
二:类适配器模式

我们的电脑只能读取SD卡,现在我们有一张TF卡也需要使用电脑读取出来。此时我们就需要增加一个适配器来适配TF卡。

适配者:SD卡。

public interface SDCard {
    String readSD();
    void writeSD(String msg);
}

public class SDCardImpl implements SDCard {
    @Override
    public String readSD() {
        return "read sd card";
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("write msg to sd card");
    }
}

目标:TF卡。

public interface TFCard {
    String readTF();
    void writeTF(String msg);
}


public class TFCardImpl implements TFCard {
    @Override
    public String readTF() {
        return "read tf card";
    }

    @Override
    public void writeTF(String msg) {
        System.out.println("write msg to tf card");
    }
}

适配器类:需要继承目标实现类TFCardImpl,并且实现适配者接口SDCard。内部实现最终还是调用的是目标实现类的方法。

public class TF2SDCardAdapter extends TFCardImpl implements SDCard {
    @Override
    public String readSD() {
        return this.readTF();
    }

    @Override
    public void writeSD(String msg) {
        this.writeTF(msg);
    }
}

电脑Computer

public class Computer {
    public String readSD(SDCard sdCard) {
        return sdCard.readSD();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        Computer computer = new Computer();
        String sdCardMsg = computer.readSD(new SDCardImpl());
        System.out.println(sdCardMsg);

        // 读取TF卡
        String tfCardMsg = computer.readSD(new TF2SDCardAdapter());
        System.out.println(tfCardMsg);
    }
}
三:对象适配器模式

类适配器模式 TF2SDCardAdapter extends TFCardImpl 需要继承目标实现类,java是单继承的,如果继承了目标实现类那么适配器类就不能再继承其它类了,这是类适配器不好的地方。

对象适配器模式可以采用将现有组件库中的已经实现的组件引入适配类中,该类同时实现当前系统的业务接口。

对象适配器模式不需要继承,只需要将目标对象引入作为属性即可。

public class TFToSDCardAdapter implements SDCard {
	// 目标接口
    private TFCard tfCard;
	// 只提供一个有参构造函数
    public TFToSDCardAdapter(TFCard tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSD() {
        return tfCard.readTF();
    }

    @Override
    public void writeSD(String msg) {
        tfCard.writeTF(msg);
    }
}

Client

public class Client {
    public static void main(String[] args) {
        Computer computer = new Computer();
        String sdCardMsg = computer.readSD(new SDCardImpl());
        System.out.println(sdCardMsg);

        // 读取TF卡
        String tfCardMsg = computer.readSD(new TFToSDCardAdapter(new TFCardImpl()));
        System.out.println(tfCardMsg);
    }
}
四:应用场景
  • 以前开发的系统存在满足新系统功能需求的接口,但其接口同新系统的接口不一致,需要转换一下。
  • 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
五:适配器模式简介

适配器模式其实就是对目标对象的一种包装,然后暴露出来统一的方法签名而已。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号