面试题答案
一键面试1. 适配器模式与策略模式搭配
- 原理:策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。在微服务接口转换场景中,适配器模式负责将不同接口适配到统一接口,而策略模式可以用来动态选择不同的适配策略,以实现接口的多版本兼容。例如,针对不同版本的接口,每种版本的适配逻辑可以作为一个具体策略,在运行时根据版本信息选择合适的策略(即适配逻辑)。
- 实现思路:
- 定义一个策略接口,每个具体的适配策略实现该接口。比如
VersionAdapterStrategy
接口,有adaptV1()
、adaptV2()
等具体策略类实现该接口来适配不同版本接口。 - 在适配器类中,组合策略接口对象,通过构造函数或设置方法传入具体策略。例如
VersionAdapter
类中包含private VersionAdapterStrategy strategy;
,并提供public VersionAdapter(VersionAdapterStrategy strategy) { this.strategy = strategy; }
构造函数。 - 在适配器的适配方法中,调用策略对象的方法来完成实际适配。如
public void adapt() { strategy.adapt(); }
- 定义一个策略接口,每个具体的适配策略实现该接口。比如
2. 适配器模式与工厂模式搭配
- 原理:工厂模式负责创建对象,在微服务接口转换中,结合适配器模式,可以根据不同的条件(如接口版本、服务类型等)创建相应的适配器实例。这样能有效管理适配器对象的创建,便于代码的维护和扩展,解决动态扩展接口适配的问题。
- 实现思路:
- 定义一个工厂接口和具体的工厂实现类。比如
AdapterFactory
接口及VersionAdapterFactory
具体实现类。 - 在工厂实现类中,根据传入的参数(如版本号)创建不同的适配器对象。例如
public Adapter createAdapter(int version) { if (version == 1) { return new Version1Adapter(); } else if (version == 2) { return new Version2Adapter(); } return null; }
- 在客户端代码中,通过工厂来获取适配器实例,而不是直接创建。如
Adapter adapter = new VersionAdapterFactory().createAdapter(1);
- 定义一个工厂接口和具体的工厂实现类。比如
3. 适配器模式与装饰器模式搭配
- 原理:装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。在微服务接口转换场景下,适配器模式完成基本的接口适配,装饰器模式可以在适配后的接口上动态添加额外功能,实现接口功能的动态扩展。比如在完成接口适配后,为接口添加日志记录、权限验证等功能。
- 实现思路:
- 定义一个装饰器抽象类,实现与适配器相同的目标接口,并组合一个适配器对象。如
AdapterDecorator
类实现目标接口Target
,并包含private Target target; public AdapterDecorator(Target target) { this.target = target; }
- 具体的装饰器子类继承装饰器抽象类,在调用适配器方法前后添加额外功能。例如
LoggingAdapterDecorator
类继承AdapterDecorator
,重写request()
方法为public void request() { System.out.println("Logging before request"); target.request(); System.out.println("Logging after request"); }
- 在客户端代码中,先创建适配器对象,再用装饰器对其进行装饰。如
Target adapter = new VersionAdapter(); Target decoratedAdapter = new LoggingAdapterDecorator(adapter); decoratedAdapter.request();
- 定义一个装饰器抽象类,实现与适配器相同的目标接口,并组合一个适配器对象。如