当前位置:   article > 正文

Java设计模式系列 适配器模式细致解读(超通俗易懂)_java adapter 适配器

java adapter 适配器

一、什么是适配器模式?

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户所期望的另一个接口。适配器模式可以在不修改现有代码的情况下,能够使得原本由于接口不兼容而不能一起工作的类能够协同工作,它提供了一种灵活的方式来集成和使用不同接口的类

大白话:适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者。简单理解就是转换器、转接口的存在。
在这里插入图片描述

二、适配器模式角色划分

  • Target:目标接口、期望接口,是当前业务中所期待的接口,它可以是抽象类或者接口。
  • Adaptee:被访问和适配的现存的接口(被适配者)
  • Adapter:适配器模式的核心角色,其他两个角色时已存在的角色,而适配器角色时需要新建立。它的职责是将被适配Adaptee角色已有的接口通过继承或者类关联的方法转换为目标角色Target匹配的接口,从而达到对Adaptee接口与Target接口进行匹配的目的。

三、适配器模式的两种实现

1、类适配器模式

// 安卓手机接口
public interface AndroidInterface {
    // typeC接口耳机
    void androidHeadSet();
    // ..... 其他接口
}

// 安卓手机实现类
public class AndroidHeadSet implements AndroidInterface {
    @Override
    public void androidHeadSet() {
        System.out.println("这里是使用安卓耳机接口的连接");
    }
}

// iphone苹果手机接口
public interface IPhoneInterface {
    // lightning接口耳机
    void iphoneHeadSet();
}
// 苹果手机实现类
public class IPhoneHeadSet implements IPhoneInterface{
    @Override
    public void iphoneHeadSet() {
        System.out.println("这里是使用lightning接口耳机的连接");
    }
}

// 注意接下来!!!
// 适配器类
public class HeadSetAdapter extends AndroidHeadSet implements IPhoneInterface {

	// 重写iphone耳机方法 并调用父类安卓耳机的方法,已达到适配器模式的目的
	// 解决接口不兼容不能在一起工作的问题
    @Override
    public void iphoneHeadSet() {
        super.androidHeadSet();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        // 直接通过苹果接口 使用苹果耳机
        IPhoneInterface iPhoneInterface = new IPhoneHeadSet();
        iPhoneInterface.iphoneHeadSet();
        //通过类的适配器进行连接
        HeadSetAdapter headSetAdapter = new HeadSetAdapter();
        headSetAdapter.iphoneHeadSet();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

这里HeadSetAdapter耳机适配器类,为什么会 继承 AndroidHeadSet 实现 IPhoneInterface

通过继承 AndroidHeadSet ,适配器类获得了androidHeadSet()方法
通过实现IPhoneInterface接口,在重写的iphoneHeadSet()方法中调用androidHeadSet()方法
适配器类能够将IPhoneInterface接口的调用转发给AndroidHeadSet类的实现

  • **优点:**使用方便,代码简化,不需要引入对象实例
  • 缺点:高耦合,灵活性低。

2、对象适配器模式(推荐)

// 安卓手机接口
public interface AndroidInterface {
    // typeC接口耳机
    void androidHeadSet();
    // ..... 其他接口
}

// 安卓手机实现类
public class AndroidHeadSet implements AndroidInterface {
    @Override
    public void androidHeadSet() {
        System.out.println("这里是使用安卓耳机接口的连接");
    }
}

// iphone苹果手机接口
public interface IPhoneInterface {
    // lightning接口耳机
    void iphoneHeadSet();
}
// 苹果手机实现类
public class IPhoneHeadSet implements IPhoneInterface{
    @Override
    public void iphoneHeadSet() {
        System.out.println("这里是使用lightning接口耳机的连接");
    }
}

// 注意接下来!!!
// 适配器类
public class ObjectHeadSetAdapter implements IPhoneInterface {

    private AndroidInterface androidInterface;

    public ObjectHeadSetAdapter(AndroidInterface androidInterface) {
        this.androidInterface = androidInterface;
    }

    @Override
    public void iphoneHeadSet() {
        androidInterface.androidHeadSet();
    }
}

public class Client {
    public static void main(String[] args) {
        // 直接通过苹果接口 使用苹果耳机
        IPhoneInterface iPhoneInterface = new IPhoneHeadSet();
        iPhoneInterface.iphoneHeadSet();
        //通过类的适配器进行连接
        HeadSetAdapter headSetAdapter = new HeadSetAdapter();
        headSetAdapter.iphoneHeadSet();
        //通过对象的适配器进行连接
        AndroidInterface androidInterface = new AndroidHeadSet();
        ObjectHeadSetAdapter objectHeadSetAdapter = new ObjectHeadSetAdapter(androidInterface);
        objectHeadSetAdapter.iphoneHeadSet();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/828921
推荐阅读
相关标签
  

闽ICP备14008679号