桥接模式是设计模式中比较难的一种,其原文叙述是:“将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。”表述也很抽象,其本质是通过一个抽象类A的构造函数传入一个Interface类B作为参数,这样在实现抽象类A和实例化时,传入抽象类B的实现类,可以实现抽象类A和B的灵活配置,如此完成实现两个部分都可以独立变化的目的。
在软件系统开发中,开放接口系统的设计是比较常见的。开放接口系统一般也包含两个独立变化的部分:
一是鉴权系统,一般包括了token解析、时间戳的对比等,而且往往对接的各种系统都有自己的鉴权方式,不同系统鉴权模式各不相同。
二是接口数据,一般用于发送http请求或者从对方返回的http响应中获取数据(这里暂不讨论通过监听http接口接受被动访问的接口,那些接口一般用controller实现)。
这两个部分很适合用桥接模式实现:
//抽象化的鉴权类
public Interface Authenticator{
void OperationAuth();
}
//具体鉴权类
public class ConcreteAuth implements Authenticator{
//生成Token并放到请求头
String token = TokenCreater.createToken(SessionManager.getSK());
Request.addHeader(token);
}
//抽象的桥接类,包含了抽象的鉴权接口和抽象的HTTP请求方法
public abstract class AbstractionHttpInterface(){
//这里通过构造函数,声明抽象的鉴权接口
protected Authenticator auth;
protected AbstractionInterface(Authenticator auth){
this.auth = auth
}
//声明一个抽象的HTTP请求
public abstract HTTPResponse SendHttpRequest(HttpRequest body);
}
//实现一个具体的接口
class GetDeviceInterface extends AbstractionHttpInterface{
//通过构造函数传递鉴权方法
protected GetDeviceInterface(Authenticator auth) {
super(auth);
}
//接口的请求体构造与实现方法
public HTTPResponse SendHttpReques(HttpRequest body) {
//这里写接口的具体请求方法
return Request.sendRequest(body);
}
}
注:以上代码并非完整代码,仅供理解原理。
使用:
//先声明鉴权方法
Authenticator authMethod = new ConcreteAuth();
//具体的设备数据获取类
AbstractionHttpInterface getDeviceRequest = new GetDeviceInterface(authMethod);
getDeviceRequest.SendHttpRequest();