面试题答案
一键面试1. 第三方库接口不兼容场景
- 举例:假设项目中需要使用一个第三方绘图库来绘制图形,但该库提供的绘制接口
DrawAPI
的方法签名与项目现有的绘图功能接口Shape
的方法签名不一致。例如,DrawAPI
的绘制圆形方法可能是drawCircle(float x, float y, float radius)
,而Shape
接口期望的绘制圆形方法是drawCircle(int x, int y, int radius)
。 - 原因:通过适配器模式,可以创建一个适配器类,如
DrawAPIAdapter
,实现Shape
接口,并在内部包装DrawAPI
对象。在DrawAPIAdapter
的drawCircle(int x, int y, int radius)
方法中,将参数进行适当转换后调用DrawAPI
的drawCircle(float x, float y, float radius)
方法,这样就可以在不修改第三方库和现有系统核心代码的情况下,使两者兼容。
2. 旧系统接口复用场景
- 举例:公司有一个旧的用户管理系统,提供了获取用户信息的接口
OldUserInfoService
,其方法是getOldUserInfo(String userId)
,返回的是旧格式的用户信息。现在开发新系统,新系统的用户服务接口NewUserInfoService
期望的方法是getNewUserInfo(String userId)
,返回新格式的用户信息。 - 原因:使用适配器模式,创建
OldUserInfoAdapter
类,实现NewUserInfoService
接口,在getNewUserInfo(String userId)
方法中调用OldUserInfoService
的getOldUserInfo(String userId)
方法,并将旧格式用户信息转换为新格式。这样既复用了旧系统的功能,又满足了新系统接口的要求,避免了重新开发用户信息获取功能。
3. 不同数据格式传输场景
- 举例:系统A通过网络接收的数据格式是JSON字符串,而系统B的处理逻辑要求的数据格式是Java对象。系统A中接收数据的接口返回的是JSON字符串,系统B处理数据的接口期望接收Java对象。
- 原因:通过适配器模式,创建
JsonToObjectAdapter
类,实现系统B处理数据的接口。在该适配器类中,将接收到的JSON字符串解析为Java对象,从而实现数据格式的适配,使得系统A和系统B能够顺利交互,无需改变系统A和系统B内部复杂的业务逻辑。