重学设计模式-适配器模式

482 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言

最近电脑连接无线网信号不太稳定,网速很慢,想着直接接根网线,这样速度能快点稳定点。网线拉好,发现电脑没有网线水晶头(RJ45)的插口,只能网上淘一个转换器。在JAVA里如果发现两个类需要互相调用但是又不兼容,这个时候就可以创建一个适配器类来帮我们完成工作,类似与网线的转接头一样。

定义

在两个不兼容的接口之间搭一座桥梁。这种模式属于结构型模式,它结合了这两个独立接口的功能

优点

可以将任何两个没有关联的类一起运行。提高了类的复用性,使得类的运用更加灵活,透明。

缺点

由于JAVA单继承的特性,所以对于目标类必须是抽象类或者接口。

图解

image.png

实现

电脑

public class Computer {
    // 电脑想通过typeC接口上网,通过typeC连接到转换器
    public void linkInternet(RJ45ToTypeC adapter){
        // 上网的具体实现,调用转接头的上网功能
        adapter.handleRequest();
    }
}

RJ45

public class RJ45 {
    public void request(){
        System.out.println("RJ45连接,完成联网。");
    }
}

RJ45ToTypeC

转接头抽象接口

public interface RJ45ToTypeC {
    // 处理请求,转接头 <--> RJ45
    public void handleRequest();
}

Adapter

// typeC <--> Adapter <--> RJ45
public class Adapter extends RJ45 implements RJ45ToTypeC {
    @Override
    public void handleRequest() {
        // 连接RJ45上网
        super.request();
    }
}

测试

public class AdapterTest {
    public static void main(String[] args) {
        Computer computer = new Computer();
        RJ45ToTypeC adapter = new Adapter();
        computer.linkInternet(adapter);
    }
}

打印输出

RJ45连接,完成联网。

说明

image.png

我们的电脑想要直接连接网线上网,但是电脑没有RJ45的插口,所以借用适配器转接口,一头连接网线,一头连接电脑,起到中间桥梁的作用,完成信号对接。

总结

当我们有动机的去修改一个正常使用的类时,应该考虑适配器模式,适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。