gpt4 book ai didi

java - 这是什么设计模式——适配器、提供者、委托(delegate)、模板方法,还是……?

转载 作者:行者123 更新时间:2023-11-30 04:58:23 27 4
gpt4 key购买 nike

这是一个简单的设计模式问题:

作为我当前项目的一部分,我编写了一个接口(interface),用于执行数据库搜索(使用 Web 服务和相关客户端 stub )并返回结果 - 随后将由 struts 操作用作对 JSON 请求的响应。

界面是这样的:

    public interface DynamicSearchProvider {

JSONObject getSearchResultsAsJSONObject(DatatablesRequestParams params)
throws JSONException;

}

然后对于每种特定类型的对象,将实现上述内容的具体版本,以便它将调用相关的 Web 服务并返回结果。

基本上,据我所知,它只是一堆业务逻辑的包装。

问题是,你会怎么调用它?我不喜欢“提供者”这个词,因为它相当含糊。是否有一个明确定义的设计模式?

理想情况下,我更愿意使用 Spring 来解决这个问题,但不幸的是我不能在这个项目中使用它,因为它是遗留代码库的一部分......

编辑:

这里是它的使用地方:

public abstract class GenericDynamicSearchAction extends GenericAction {

private static Log log = LogFactory.getLog(GenericDynamicSearchAction.class);

/**
* Method to be implemented by each individual search action
*/
public abstract DynamicSearchProvider getDynamicSearchProvider();

public final ActionForward executeAuthenticated(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException {

log.debug("called");

DatatablesRequestParams datatablesRequestParams = DatatablesUtils.extractDatatablesParamsFromRequest(request);

try {


JSONObject jsonResponse = getDynamicSearchProvider().getSearchResultsAsJSONObject(datatablesRequestParams);

String echo = datatablesRequestParams.getEcho();

jsonResponse.put(DatatablesUtils.ECHO_FIELD_NAME, echo);
response.setContentType("application/json");

String jsonResponseString = jsonResponse.toString();

log.debug("Returning JSON response:"+jsonResponseString);

response.getWriter().print(jsonResponseString);

} catch (JSONException e) {

response.setContentType("text/html");
response.getWriter().print(e.getMessage());

}

return null;

}

等等...

因此,对于特定类型的对象,会实现上述 Action 类的具体版本(顺便说一句,它是 stuts action),并且它将引用上述“Provider”的实现......就像这个:

public class PolicyDynamicSearchAction extends GenericDynamicSearchAction {

@Override
public final DynamicSearchProvider getDynamicSearchProvider() {

return new PolicyDynamicSearchProvider();

}
}

public class PolicyDynamicSearchProvider implements DynamicSearchProvider {

public final JSONObject getSearchResultsAsJSONObject(DatatablesRequestParams params) throws JSONException {
//some business logic that goes to webservice etc to get the info
}
}

希望它能让大家更清楚。

最佳答案

从你的“一堆业务逻辑”猜测它是一个外观。不过,恕我直言,按照设计模式命名类通常不是一个好主意。首先,类可以同时实现多种设计模式,其次,这种方法在重构过程中很难维护。

我认为对于外观来说这是一个特别错误的想法,因为调用者不应该意识到该方法作为外观工作的事实。

Provider 听起来不错,但 DynamicSearchService 对我来说更好。

关于java - 这是什么设计模式——适配器、提供者、委托(delegate)、模板方法,还是……?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com