Java 改造接口的设计模式

Java 改造接口的设计模式,java,android,design-patterns,retrofit,Java,Android,Design Patterns,Retrofit,我的改型界面创建者的设计有问题。我希望能够以通用的方式实例化API接口,并在传递令牌时更新相应的实例。当前,当我更新令牌时,我必须再次调用createService()方法,以获取在生成接口时使用令牌的新实例 有人问了一个类似的问题,但始终没有得到答案 使您的拦截器如下所示: public class TokenInterceptor implements Interceptor { private String token; public String getToken()

我的改型界面创建者的设计有问题。我希望能够以通用的方式实例化API接口,并在传递令牌时更新相应的实例。当前,当我更新令牌时,我必须再次调用createService()方法,以获取在生成接口时使用令牌的新实例

有人问了一个类似的问题,但始终没有得到答案


使您的拦截器如下所示:

public class TokenInterceptor implements Interceptor {

    private String token;

    public String getToken() {
        return token;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

            // Request customization: add request headers
            Request.Builder requestBuilder = original.newBuilder()
                    .header("Cache-Control", "no-cache")
                    .header("Accept", "application/json")
                    .method(original.method(), original.body());
            if (getToken() != null) {
                requestBuilder.header("Authorization", "Bearer " + AmzToken);
            }
            Request request = requestBuilder.build();
            return chain.proceed(request);
    }

    public void setToken(String token) {
        this.token = token;
    }
}
将它添加到您的HTTP客户端并保持对该拦截器的引用。
现在,您不必在每次令牌更改后调用
createService()
。只需通过interceptor.setToken()更改interceptor中的token即可。

我可以像他那样将您的类设置为内部静态类吗。您只需要将令牌设置为外部类
amazonApi = RetrofitCreator.createService(AmazonAPI.class);
public class TokenInterceptor implements Interceptor {

    private String token;

    public String getToken() {
        return token;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

            // Request customization: add request headers
            Request.Builder requestBuilder = original.newBuilder()
                    .header("Cache-Control", "no-cache")
                    .header("Accept", "application/json")
                    .method(original.method(), original.body());
            if (getToken() != null) {
                requestBuilder.header("Authorization", "Bearer " + AmzToken);
            }
            Request request = requestBuilder.build();
            return chain.proceed(request);
    }

    public void setToken(String token) {
        this.token = token;
    }
}