【Java开发】设计模式 05:适配器模式
创始人
2024-06-02 07:25:59
0

1 适配器模式介绍

适配器模式(Adapter Pattern)属于结构型模式(结构型模式关注如何将现有的类或对象组织在一起形成更加强大的结构。)。

将一个接口转换为客户端所期待的接口,从而使两个接口不兼容的类可以在一起工作

📌 场景

  • 当需要使用一个现存的类,但它提供的接口与我们系统的接口不兼容,而我们还不能修改它时;

  • 当多个团队独立开发系统的各功能模块,然后组合在一起,但由于某些原因事先不能确定接口时。

📌 适配器模式中出现的角色

在适配器模式中,主要存在四个角色

  • Target—NetToUsb(目标):目标定义了请求者所要使用的功能,是一种标准,具体实现可交由不同的适配器采用不同的方法进行实现;

  • Adapter—(适配器):负责实现转换功能的对象,同时其功能的实现需要符合目标中定义的标准;

  • Adaptee—NetLine(被适配的对象):需要被适配器转换的对象;

  • Client—Computer(请求者):即需要使用适配器的对象,本文是直接调用NetToUsb,由适配器来具体实现,而不用关心适配的具体过程。

适配器模式分为类适配器和对象适配器。

2 类适配器

📌 UML图

📌1.定义电脑

/*** 电脑* 

想上网,需要插网线*/ public class Computer{/*** 电脑需要连接上转换器才可以上网*/public void connect(NetToUsb adapter){// 上网的具体实现,找一个转接头adapter.connectNetLine();} }

📌2.定义usb转网口转接器

/*** 转接器*/
public interface NetToUsb {/*** 处理请求,usb -> 网线*/void connectNetLine();}

📌3.定义网线

/*** 网线*/
public class NetLine {/*** 上网*/public void online(){System.out.println("连接网线上网");}
}

📌4.定义类适配器

/*** 类适配器*/
public class ClassAdapter extends NetLine implements NetToUsb{@Overridepublic void connectNetLine() {// 可以上网了super.online();}
}

📌5.使用

// 电脑
Computer computer = new Computer();
// 转接器已经插上网线
ClassAdapter adapter = new ClassAdapter();
// 电脑连接转接器,成功上网
computer.connect(adapter);

这种实现方式的适配器需要占用一个继承位。如果此时 NetToUsb 不是接口而是抽象类的话,由于 Java 不支持多继承,就无法实现了。同时根据合成复用原则,应该更多的通过合成的方式去实现功能。

3 对象适配器

这是更为常用的一种模式。

📌 UML图

前三步照旧~

📌5.定义对象适配器

public class ObjectAdapter implements NetToUsb{//网线private NetLine netLine;public ObjectAdapter(NetLine netLine){this.netLine = netLine;}@Overridepublic void connectNetLine() {// 可以上网了netLine.online();}
}

📌5.使用

// 电脑
Computer computer = new Computer();
// 网线
NetLine netLine = new NetLine();
// 转接器插上网线
ObjectAdapter adapter = new ObjectAdapter(netLine);
// 电脑连接转接器,成功上网
computer.connect(adapter);

这样的方式不会占用继承位,且满足合成复用原则,耦合度更低,也更加灵活,推荐使用。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...