Java RESTWebService客户端使用哪种设计模式?
我有一个Web服务执行以下操作:Java RESTWebService客户端使用哪种设计模式?,java,web-services,design-patterns,Java,Web Services,Design Patterns,我有一个Web服务执行以下操作: 登录 注销 登记 每个Web服务仅在createRequest()方法和processResponse()方法中传递的参数方面不同 public Map<String, String> SubscriberLogin(String username ,String password , String addInfoData) { Map<String, String> returnMap = new HashMa
- 登录
- 注销
- 登记
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;
}
公共地图订阅登录(字符串用户名、字符串密码、字符串AddInfo数据)
{
Map returnMap=newhashmap();
试一试{
Map paramMap=新的HashMap();
paramMap.put(“userIdentity”,用户名);
paramMap.put(“密码”,password);
//每个Web服务的Rest_WsConstants(Web服务路径)和paramMap键/值映射的值都不同
HttpPost postReq=createRequest(Rest_WsConstants.LOGIN_WS.path,paramMap);
StringEntity实体=新的StringEntity(AddInfo数据);
postReq.setEntity(实体);
HttpResponse wsResponse=wsClient.execute(postReq);
returnMap=processResponse(wsResponse);
}捕获(例外e){
Logger.logError(模块,“登录时出错,原因:”+e.getMessage());
}
返回地图;
}
但目前只有一个单例类,所有操作都定义为单独的静态方法
请建议在此类场景中实现哪种设计模式。我将使用Factory模式来实现此场景。我会有以下结构 我将遵循选择器方法,其中选择器可以是
登录
,注销
,注册
等等。我将定义三个类来实现关注点的分离,因为如果我将所有与这些操作相关的逻辑组合在一个类中,并且如果我需要对所提到的任何操作进行简单更改,我就不想更改和测试整个代码。既然如此,我有三个类LoginHelper
,LogoutHelper
和RegistrationHelper
factory类将拥有所有三个类的实例,并且基于选择器
我将把操作委托给相关类
此外,我所说的工厂将包含DAO层的处理程序,并将在需要时向助手提供相同的处理程序
在类中具有factory实例,从中可以委托登录和注销等任务。factory.processRequest(“login”、“passadditioninformationif youwantlikerequestetc”)代码>
如果您正在实现基于树的结构(/users/USERNAME/subscriptions以显示名为USERNAME的用户的订阅信息),您可能需要查看责任链。使用Factory创建单个操作的建议是一个好建议,因此请坚持使用该建议,除非您希望能够链接这些操作
“链”是指“用户”操作需要用户名,并且应该首先执行(获取用户数据),然后调用“订阅”操作,同时将其本身作为参数和/或它(可能)检索的用户数据传递。我们可以使用策略或模板吗(因为createRequest、processResponse和execute方法是相同的)?但是,作为调用程序,您将如何使用策略或模板模式,应该知道它需要使用什么。我的意思是,您将如何传递选择器,或者如何选择哪个类将处理传入的请求。我认为你所说的模式只会帮助我在解决方案中提到的帮助者创建模板。对。你能用一些例子来解释你的答案吗。
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;
}
}