如何在Spring中实现自己的工厂

时间:2016-09-05 13:27:40

标签: java spring design-patterns

我有三种或更多类型的请求,它们以JSON数据的形式出现并转换为对象。

假设有一个请求:

{
  "id":1,
  "type":"0",
  "url":
  "http://stackoverflow.com"
}

我想建立一些让我能够获得这样的页面的conncetion工厂:

Request request = new Request(json);
Response response = request.execute();

当然,execute方法对每个请求的类型都有不同的实现。

我有一个用普通JavaSE编写的原型,我想迁移到Spring Framework,如果有问题,也可以得到一些关于我的代码的反馈。首先,我构建了一个SimpleRequest来获取页面并返回正文。

class SimpleRequest implements Request{
    Package requestData;
    @Override
    public Connection.Response execute() throws IOException {
        Connection.Response response = Jsoup
                                           .connect(requestData.getUrl())
                                           .execute();
        return response;
    }

    public void bind(Package requestData){
        this.requestData = requestData;
    }
}

此方法只是获取页面。没什么有趣的。

我也有RequestTemplate准备请求:

class RequestTemplate{
    Package requestData;
    RequestFactory requestFactory = new RequestFactory();
    Request request;
    public RequestTemplate(Package requestData){
        this.requestData = requestData;
        try {
            request = requestFactory.getRequestInstance(requestData.getType());
            request.bind(requestData);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public Connection.Response execute(){
        Connection.Response connection = null;
        try{
            connection = request.execute();
        }catch (Exception e){
            e.printStackTrace();
        }
        return connection;
    }
}

此方法获取基于RequestType;

的对象

当然我有RequestFactory,它有对象的描述并创建它们的新实例。

class RequestFactory{
    public Request getRequestInstance(RequestType type) throws Exception {
        switch (type){
            case SIMPLE:
                return new SimpleRequest();
            default:
                throw new Exception("Error");
        }
    }}

因此我们检查与枚举列表匹配的RequestType类型并返回新实例。

我还在基于Spring Framework的小项目中实现类似的东西,有两个问题。

  1. 据我所知,上面的代码有点乱,并且有一些性能问题。我认为我将使用代码来提供大量连接,因此我必须以某种方式优化它,因为内存限制等等。

  2. 与Spring集成。这是一个框架,所以我认为应该有一些功能可以让我的生活更轻松。我已经阅读了有关FactoryBean的内容,但还没有找到如何将其与我的任务联系起来。正如我上面提到的,代码有点乱,我认为我创建了很多抽象。

  3. 感谢。

0 个答案:

没有答案