MST

星途 面试题库

面试题:Java适配器模式的应用场景

请举例说明在Java开发中,哪些情况下适合使用适配器模式来解决系统接口兼容难题,并简述原因。
13.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 第三方库接口不兼容场景

  • 举例:假设项目中需要使用一个第三方绘图库来绘制图形,但该库提供的绘制接口DrawAPI的方法签名与项目现有的绘图功能接口Shape的方法签名不一致。例如,DrawAPI的绘制圆形方法可能是drawCircle(float x, float y, float radius),而Shape接口期望的绘制圆形方法是drawCircle(int x, int y, int radius)
  • 原因:通过适配器模式,可以创建一个适配器类,如DrawAPIAdapter,实现Shape接口,并在内部包装DrawAPI对象。在DrawAPIAdapterdrawCircle(int x, int y, int radius)方法中,将参数进行适当转换后调用DrawAPIdrawCircle(float x, float y, float radius)方法,这样就可以在不修改第三方库和现有系统核心代码的情况下,使两者兼容。

2. 旧系统接口复用场景

  • 举例:公司有一个旧的用户管理系统,提供了获取用户信息的接口OldUserInfoService,其方法是getOldUserInfo(String userId),返回的是旧格式的用户信息。现在开发新系统,新系统的用户服务接口NewUserInfoService期望的方法是getNewUserInfo(String userId),返回新格式的用户信息。
  • 原因:使用适配器模式,创建OldUserInfoAdapter类,实现NewUserInfoService接口,在getNewUserInfo(String userId)方法中调用OldUserInfoServicegetOldUserInfo(String userId)方法,并将旧格式用户信息转换为新格式。这样既复用了旧系统的功能,又满足了新系统接口的要求,避免了重新开发用户信息获取功能。

3. 不同数据格式传输场景

  • 举例:系统A通过网络接收的数据格式是JSON字符串,而系统B的处理逻辑要求的数据格式是Java对象。系统A中接收数据的接口返回的是JSON字符串,系统B处理数据的接口期望接收Java对象。
  • 原因:通过适配器模式,创建JsonToObjectAdapter类,实现系统B处理数据的接口。在该适配器类中,将接收到的JSON字符串解析为Java对象,从而实现数据格式的适配,使得系统A和系统B能够顺利交互,无需改变系统A和系统B内部复杂的业务逻辑。