用桥接模式(Bridge)实现开放接口系统

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

你可能感兴趣的:(桥接模式,java,开发语言)