这是一个简单的设计模式问题:
作为我当前项目的一部分,我编写了一个接口,该接口执行数据库搜索(使用webservices和相关的客户端存根)并返回结果-随后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动作),并且它将引用上述“ 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
}
}
希望它使它更清晰。
最佳答案
从您的“业务逻辑群”中猜测这是一个Facade。但是,恕我直言,在设计模式之后命名类通常不是一个好主意。首先,类可以一次实现几种设计模式,其次,这种方法在重构期间难以维护。
我认为对于Facade而言,这是个特别错误的想法,因为调用者不应意识到该方法可作为Facade起作用。
提供程序听起来不错,但DynamicSearchService对我来说听起来更好。
关于java - 这是什么设计模式-适配器,提供程序,代理,模板方法或…?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7755182/