java - Rest WebService 客户端应使用哪种设计模式?

标签 java web-services design-patterns

我有一个网络服务执行以下操作:

  • 登录
  • 退出
  • 注册

每个 Web 服务仅在 createRequest() 方法和 processResponse() 方法中传递的参数方面有所不同。

public Map<String, String> SubscriberLogin(String username ,String password ,   String addInfoData)
{

        Map<String, String> returnMap = new HashMap<String, String>();
        try {
            Map<String,String> paramMap = new HashMap<String, String>();
            paramMap.put("userIdentity", username);
            paramMap.put("password", password);

// Every webservice varies in value of Rest_WsConstants(webservice path) and paramMap-key/value mapping 
            HttpPost postReq = createRequest(Rest_WsConstants.LOGIN_WS.path, paramMap);

            StringEntity entity = new StringEntity(addInfoData);
            postReq.setEntity(entity);

            HttpResponse wsResponse = wsClient.execute(postReq);

            returnMap = processResponse(wsResponse);

        }catch (Exception e) {
            Logger.logError(MODULE,"Error while login, reason:"+e.getMessage());
        }
        return returnMap;
}

但目前只有一个 Singleton 类,所有操作都定义为单独的静态方法。

请建议在这种情况下实现哪种设计模式。

最佳答案

我将使用工厂模式来实现这个场景。我会有以下结构。

我会遵循选择器方法,其中选择器可以是登录注销注册等。我将定义三个类来实现关注点分离,因为如果我将与这些操作相关的所有逻辑组合在单个类中并且如果我需要对任何提到的操作进行简单的更改,我不想更改和测试整个代码。话虽如此,我有三个类 LoginHelperLogoutHelperRegistrationHelper

工厂类将具有所有三个类的实例,并且基于选择器我会将操作委托(delegate)给相关类。

此外,我正在谈论的工厂将包含 DAO 层的处理程序,并且如果需要,将向您的助手提供相同的处理程序。

在您的类中拥有工厂实例,您希望在其中委托(delegate)登录和注销等任务。 factory.processRequest("login", "passAdditionInformationIfYouWantLikeRequestEtc.");

<小时/>
interface UserActivity{
    void processResponse(); 
}

class LoginHelper implements UserActivity{
    public void processResponse() { /*write logic*/ }   
}

class LogoutHelper implements UserActivity{
    public void processResponse() { /*write logic*/ }   
}    

class Factory{
    private UserActivity login = new LoginHelper();
    private UserActivity logout = new LogoutHelper();

    //Call this method by passing selector
    public UserActivity processRequest(String selector) {
        UserActivity activityHandler = null;
        if(selector.equals("login")){
            activityHandler = this.login;
        }else if(selector.equals("logout")){
            activityHandler = this.logout;
        }
        return activityHandler;
    }
}

关于java - Rest WebService 客户端应使用哪种设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360038/

相关文章:

c# - RPG程序可以调用外部的东西吗,即: a webservice?

JavaScript/Ajax NTLM 身份验证

java - 从 p :selectCheckboxMenu with a primefaces ajax event "change"? 取消选择最后一个选定项目时如何更新支持 bean

java - 为什么消费者线程首先启动?

java - Jaxb 解码任何类型的 xml 文档

c# - 使用装饰器设计模式时的一个问题

java - 依赖于多个条件的执行和操作的解决方案模式

go - 池模式和原型(prototype)模式有什么区别?

java - 限制运行特定方法的线程数的最佳方法是什么?

Java JNA 将输出重定向到记录器