这是什么设计模式 - 适配器,提供程序,代理,模板方法,还是......?

时间:2011-10-13 13:53:12

标签: java oop design-patterns template-method-pattern

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

作为我当前项目的一部分,我编写了一个执行数据库搜索的接口(使用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
}
}

希望它更清楚。

2 个答案:

答案 0 :(得分:2)

向你猜测“一堆商业逻辑”它是一个门面。尽管如此,IMHO在设计模式之后的命名类通常不是一个好主意。首先,类可以同时实现多种设计模式,其次,这种方法在重构期间难以维护。

我认为外观特别错误,因为调用者不应该意识到该方法可以作为外观。

提供商听起来不错,但DynamicSearchService对我来说听起来更好。

答案 1 :(得分:0)

这不是我的专业领域,但我认为这听起来像Strategy pattern