适配器模式
- 适配器模式定义:
- 需求背景:
- 1. 首先定义一个通用的实体类:
- 2. 然后定义一个适配器接口,用于将不同渠道的参数转换成通用实体:
- 3. 接着实现适配器接口,将不同渠道的参数转换成通用实体:
- 4. 最后,在调用的时候,根据不同的渠道选择对应的适配器进行参数转换:
- 5. 这样,就可以使用适配器模式将不同渠道的参数统一封装到同一个实体,然后发送给第三方。
适配器模式定义:
适配器模式可以用于将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以在一起工作。
需求背景:
有这么一个需求,需要对接不同渠道通,然后将不同渠道的参数统一封装到同一个实体,最后发给一个第三方,第三方这个接口的入参一般是不会改变的
下面是一个简单的Java示例代码:
1. 首先定义一个通用的实体类:
@Data
public class ChannelParams {
private String param1;
private String param2;
}
2. 然后定义一个适配器接口,用于将不同渠道的参数转换成通用实体:
public interface ChannelAdapter {
ChannelParams adaptParams(Map<String, String> params);
}
3. 接着实现适配器接口,将不同渠道的参数转换成通用实体:
public class ChannelAAdapter implements ChannelAdapter {
@Override
public ChannelParams adaptParams(Map<String, String> params) {
ChannelParams channelParams = new ChannelParams();
channelParams.setParam1(params.get("a"));
channelParams.setParam2(params.get("b"));
// 其他参数的转换...
return channelParams;
}
}
public class ChannelBAdapter implements ChannelAdapter {
@Override
public ChannelParams adaptParams(Map<String, String> params) {
ChannelParams channelParams = new ChannelParams();
channelParams.setParam1(params.get("x"));
channelParams.setParam2(params.get("y"));
// 其他参数的转换...
return channelParams;
}
}
4. 最后,在调用的时候,根据不同的渠道选择对应的适配器进行参数转换:
public class Client {
public static void main(String[] args) {
Map<String, String> paramsA = new HashMap<>();
paramsA.put("a", "value1");
paramsA.put("b", "value2");
ChannelAdapter adapterA = new ChannelAAdapter();
ChannelParams channelParamsA = adapterA.adaptParams(paramsA);
// 发送 channelParamsA 到第三方...
Map<String, String> paramsB = new HashMap<>();
paramsB.put("x", "value3");
paramsB.put("y", "value4");
ChannelAdapter adapterB = new ChannelBAdapter();
ChannelParams channelParamsB = adapterB.adaptParams(paramsB);
// 发送 channelParamsB 到第三方...
}
}
5. 这样,就可以使用适配器模式将不同渠道的参数统一封装到同一个实体,然后发送给第三方。