桥接模式是设计模式中比较难的一种,其原文叙述是:“将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。”表述也很抽象,其本质是通过一个抽象类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();
-