首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在两个不同端点之间切换的Java设计模式

用于在两个不同端点之间切换的Java设计模式
EN

Software Engineering用户
提问于 2018-10-15 21:52:58
回答 1查看 1.1K关注 0票数 0

我有一个运行在prem上的遗留服务,并构建了一个运行在云上的新服务,该服务提供了相同的功能。我有另一个java (spring)服务,它使用another服务。这个on服务公开了许多apis,这些apis在消费应用程序中的多个地方被调用。为了准备迁移到提供确切的apis集的新服务,我定义了一个外部切换(使用服务器)。为了将流量从遗留点翻转到云端点,我所需要做的就是更新属性文件中的标志。

我目前有一个服务定位器,它有一个that模板,用于调用遗留端点。在调用云端点时,我需要更新不同的标头值集。有什么java设计模式可以用来调用云端点吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2018-10-16 11:17:06

您可以通过混合策略模式和命令模式来实现这种方法。

您可以为服务方法(S)、服务代理类、配置类和进行服务调用的类定义类(Es)。

定义服务方法的接口:

代码语言:javascript
复制
public interface IServiceMethod {
    void setClient(Service service);

    Object execute();

}

为服务方法创建类:

代码语言:javascript
复制
public class SomeMethod implements IServiceMethod {

    private Service service;

    public SomeMethod() {
    }

    @Override
    public void setClient(Service service) {
        this.client = client;

    }

    @Override
    public T execute() {
        return client.getService().someMethod();

    }
}

定义配置类:

代码语言:javascript
复制
public class ServiceConfiguration {
    private String endPointUrl;
    private EnvironmentType envType; //DEV,TEST,PROD
    private String userName;
    private String password;
    private boolean isActive;
}

定义要包装服务的类及其配置:

代码语言:javascript
复制
public interface IServiceProxy {

    Service getService();

    ServiceConfiguration getConfiguration();
}

使用配置构造服务代理,并从某个提供者获取端点(和其他所需的配置数据):

代码语言:javascript
复制
public class ServiceProxy implements IServiceProxy {
    private Service service;
    private ServiceConfiguration configuration;

    public ServiceProxy(ServiceConfiguration serviceConfiguration) {
        this.service = someFactory.getInstance().getClient(serviceConfiguration);
        this.serviceConfiguration = serviceConfiguration;
    }

    @Override
    public Service getService() {
        return service;
    }

    @Override
    public ServiceConfiguration getConfiguration() {
        return configuration;
    }
}

用方法构造MethodExecutor:

代码语言:javascript
复制
public class MethodExecutor{
    private IServiceMethod iServiceMethod;

    public MethodExecutor(IServiceMethod iServiceMethod) {
        this.iServiceMethod = iServiceMethod;
    }

    public Object execute() {
        return iServiceMethod.execute();
    }
}
票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/380076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档