IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java结构型模式——适配器模式 -> 正文阅读

[Java知识库]java结构型模式——适配器模式

结构型模式-适配器模式

什么是适配器?

在应用程序中,我们可能需要让两个不同接口的类来进行通信,在不修改这两个的前提下我们可能会需要某个中间件来完成这个衔接的过程。这个中间件就是适配器;

适配器的定义:

? 将一个类的接口转换成客户期望的另一个接口,适配器(Adapter)让原本接口不兼容的类可以相互合作

实际案例

? 现在市面上的笔记本电脑越来越薄,很多电脑就去掉了传统的那种网线接口,是插不了网线的。要插网线就需要通过USB网线转化器来实现,这里就有一些适配器的思想体现了

USB网线转换器:一端连接电脑,另一端连接网线

image-20220508202012512

角色分析

目标接口: 客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口。(这里的电脑接口)

需要适配的类: 需要适配的类或适配者类。(网线)

适配器: 通过包装一个需要适配的对象,把原接口转换成目标对象!(USB网线转换器)

代码实现适配器模式

创建三个类:网线,适配器,电脑

创建一个接口:USB接口(转换器)

1.创建网线抽象类

package com.gun.java23mvc.factory.adapter;
/**
 * 
 * 网线:要被适配的类(网线抽象类)
 * @author jkl
 *
 */
public class Reticle {
	// 上网连接功能
	public void request(){
		System.out.println("成功连接上了网线");
	}

}

2.创建USB接口

package com.gun.java23mvc.factory.adapter;
/**
 * USB接口
 * @author jkl
 *模拟接口转换器的接口,接口转换器的抽象实现~
 *通过实现这个接口,得到多个转换器
 */
public interface NetToUsb {
	
	 //作用:处理请求(将网线=>usb)
	public void handleRequest();
}

3.创建真正的适配器(通过继承的方式)

package com.gun.java23mvc.factory.adapter;
/**
 * 真正的适配器:需要连接USB接口,连接网线
 * @author jkl
 */
public class Adapter extends Reticle implements NetToUsb{

	//连接USB接口
	@Override
	public void handleRequest() {
		System.out.println("通过继承Reticle:成功连接USB转接口");
		super.request();//调用父类可以上网的接口(连接网线)
//		this.request();
		
	}
}

适配通过组合的方式实现

package com.gun.java23mvc.factory.adapter;
/**
 * @author jkl
 *对象适配器,通过组合来实现上网功能(开中常用)
 */
public class Adapter2 implements NetToUsb{

	private Reticle reticle;
	
	public void setReticle(Reticle reticle) {
		this.reticle = reticle;
	}
	@Override
	public void handleRequest() {
		System.out.println("通过组合:成功连接USB转接口");
		reticle.request();
	}

}

4.创建电脑类

package com.gun.java23mvc.factory.adapter;
/**
 * 电脑类:电脑需要连接SUB接口和网线才能上网
 * 客户端类:(电脑的抽象~)  想上网,但插不了网线
 * @author jkl
 *
 */
public class Computer {
	
	//连接USB接口
	public void net(NetToUsb adapter){
		adapter.handleRequest();
	}
}

5.创建客户类测试

package com.gun.java23mvc.factory.adapter;
/**
 * 客户端电脑真实上网
 * @author jkl
 *
 */
public class TestClient {
	
	public static void main(String[] args) {
		//需要电脑,网线,适配器~
		Computer computer = new Computer();
		Reticle reticle = new Reticle();
		//1.这种适配器是通过继承Reticle去实现的--》类适配器,
		Adapter adapter = new Adapter();
		
		// 2.通过组合去实现--》对象适配器(常用)
		Adapter2 adapter2 = new Adapter2();
		adapter2.setReticle(reticle);
		
		//1.调用上网的具体实现方法,给它一个转接器即可上网
        //该方法:适配器已经继承了Reticle(网线)了---》使得适配器自带上网功能
		computer.net(adapter);
		
		System.out.println("****************************************************");
		//2.组合实现,先插网线再接电脑
		computer.net(adapter2);
	
	}

}

输出结果:

通过继承Reticle:成功连接USB转接口
成功连接上了网线
****************************************************
通过组合:成功连接USB转接口
成功连接上了网线

案例画图总结

Computer(电脑)类 和 Reticle(网线)类没有任何关系,通过适配器将它们联系起来,从而实现了电脑上网

适配器的优点

  • 一个对象适配器可以把多个不同的适配者适配到同一个目标
  • 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者
    的子类也可通过该适配器进行适配。

适配器的缺点

  • 对于ava、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
  • 在ava、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

应用场景

  • 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源
    代码。
  • 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引
    持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
  • 在ava、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:26:14  更:2022-05-09 12:27:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:34:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码