源码在我的githubgitee中获取

目录

java23种设计模式—— 一、设计模式介绍
java23种设计模式—— 二、单例模式
java23种设计模式——三、工厂模式
java23种设计模式——四、原型模式
java23种设计模式——五、建造者模式
java23种设计模式——六、适配器模式

介绍

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,现在我们很多手机没有了耳机的插孔,只留下了type-c的插口,如果我们想使用有线耳机的话就要买一个耳机转type-c的转换器

java23种设计模式——六、适配器模式-LMLPHP

应用场景

系统需要使用现有的类,而此类的接口不符合系统的需要。
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
通过接口转换,将一个类插入另一个类系中。

优缺点

  • 优点

1、可以让任何两个没有关联的类一起运行。

2、提高了类的复用。

3、增加了类的透明度。

4、灵活性好。

  • 缺点

1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类

模式实现

适配器模式有如下三个个角色:

  • 源(Adaptee):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以
    是具体类,相当于typec线。
  • 适配器(Adapter):连接目标和源的中间对象,可以调用另一个接口,作为一个转换器。相当于耳机转typec转换器。
  • 目标(Target):即被适配的角色,相当于手机。

首先我们有一个手机类,有一个typec接口默认可以充电

/**
 * @author codermy
 * @createTime 2020/7/25
 */
public class Phone {
    public String throwTypec(){
        System.out.println("使用了typec接口");
        return "充电";
    }
}

有一个耳机可以放音乐

/**
 * @author codermy
 * @createTime 2020/7/25
 */
public interface Headset {
    String music();
}

现在买了一个转换器可以让有线耳机链接手机

/**
 * @author codermy
 * @createTime 2020/7/25
 * 转换器
 */
public class Converter implements Headset {

    private Phone phone;

    public Converter(Phone phone){
        this.phone = phone;
    }

    @Override
    public String music() {
        String s = phone.throwTypec();
        System.out.println(String.format("%s  --------------  > %s",s,"听歌"));
        return "听歌";
    }
}

用户使用转接器

/**
 * @author codermy
 * @createTime 2020/7/25
 */
public class Client {
    public static void main(String[] args) {
        Phone phone = new Phone();
        Headset headset = new Converter(phone);
        headset.music();
    }
}

输出

使用了typec接口
充电  --------------  > 听歌
08-29 04:26