【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);

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

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...