设计模式(11):适配器模式

一.什么使适配器模式?

  • 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

二.模式中的角色

  • 目标角色(Target): 客气所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
  • 需要适配的类(Adaptee): 需要被适配的类或适配者类;
  • 适配器(Adapter): 通过包装一个需要适配的对象,把原接口转换成目标接口。

三.工作中的场景

  • 经常用来做旧系统改造和升级;
  • 如果我们的系统开发之后再也不需要维护,那么很多模式都是没有必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。

四.开发中的场景

  • SpringMVC中的HandlerAdapter使用了适配器模式。处理器的类型不同,处理请求的方式也不同。
  • JDBC驱动程序。不同的数据库提供商实现了不同的JDBC驱动接口,使用适配器模式可以将这些不同的接口适配为标准的JDBC接口,提高应用程序的可移植性。

五.举例代码实现

  • 1.举例: 假如我们的鼠标不是USB接口,是传统的ps/2接口,没有办法连接我们的电脑,这个时候我们需要一个转换头,把传统的ps/2转换成USB。这里我们的转换头就是适配器对象,鼠标就是被适配器对象。

  • 2.代码实现

    (1)被适配对象(Adaptee)

java 复制代码
/**
 * 被适配器(相当于键盘)
 */
public class Adaptee {
	public void request(){
		System.out.println("可以完成客户请求的需要的功能!");
	}
}

    (2)目标角色(Target)

java 复制代码
/**
 * 相当于USB 接口
 */
public interface Target {
	void handleReq();
}

    (3)适配器(Adapter)

java 复制代码
/**
 * 适配器(相当于USB和ps/2转换器)
 */
public class Adapter extends Adaptee implements Target{
	@Override
	public void handleReq() {
		super.request();
	}	
}

    (4)调用

java 复制代码
/**
 * 相当于电脑(只有USB接口)
 */
public class App {
	public void test(Target t) {
		t.handleReq();
	}
	public static void main(String[] args) {
		App c = new App();
		c.test(new Adapter());
	}	
}

    (5)使用组合的方式跟被适配对象整合

java 复制代码
/**
 * 类适配器(相当于转换器)
 * (对象适配器,使用了组合的方式跟被适配对象整合)
 */
public class Adapter implements Target{
	private Adaptee apadtee;
	public Adapter(Adaptee apadtee) {
		this.apadtee = apadtee;
	}
	@Override
	public void handleReq() {
		apadtee.request();
	}
}

    (6)调用

java 复制代码
public class App {
	public void test(Target t) {
		t.handleReq();
	}
	public static void main(String[] args) {
		App c = new App();
		Target t=new Adapter(new Adaptee());
		c.test(t);
	}	
}

更多设计模式学习:

设计模式(1):介绍

设计模式(2):单例模式

设计模式(3):工厂模式

设计模式(4):建造者模式

设计模式(5):原型模式

设计模式(6):桥接模式

设计模式(7):装饰器模式

设计模式(8):组合模式

设计模式(9):外观模式

设计模式(10):享元模式

设计模式持续更新中...

相关推荐
喜欢你,还有大家几秒前
Nginx服务——安装与搭建
java·服务器·nginx
小玉起起4 分钟前
IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南
java·intellij-idea·idea
易元15 分钟前
模式组合应用-外观模式
后端·设计模式
龙卷风040516 分钟前
SpringAI调用第三方模型增加自定义请求参数
java·后端
java1234_小锋16 分钟前
RabbitMQ如何实现消息的持久化?
java·rabbitmq·java-rabbitmq
tqs_123451 小时前
redis zset score的计算
java·算法
kaili2301 小时前
IDEA试用过期,无法登录,重置方法
java·intellij-idea
没有bug.的程序员1 小时前
Redis 内存优化与压缩:从原理到实战的完整指南
java·数据库·redis·内存优化·压缩内存
Yeats_Liao2 小时前
Java 软件测试(三):Mockito打桩与静态方法模拟解析
java·开发语言