2

我有一个自定义对象ExportType

public class ExportType{

    protected String name;      
    protected FetchingStrategy fetchStg;
    protected ExportStrategy exportStg;

    public ExportType(String name, FetchingStrategy fetch, ExportStrategy export) {
            this.name = name;
        this.fetchStg = fetch;
        this.exportStg = export;
    }

    // ...
}

在我的应用程序中,我必须创建一个具有不同FetchingStrategyExportStrategy. 将来可以通过实现新的FetchingStrategyand来创建新的导出类型ExportStrategy,因此我想将我的应用程序设计为尽可能灵活。

是否有我应该应用的设计模式来获得我需要的东西?TypeFactory为每个特定实例创建不同ExportType的方法是正确的方法吗?

更新

我试图总结我的问题:我正在开发一个用于从数据库导出数据的 Web 应用程序。我有几种方法可以从 DB( ExportTypes) 中提取数据,这些类型是通过 和 的不同组合获得FetchingStrategyExportStrategy。现在我需要创建这些“组合”的列表,以便在必要时调用它们。我可以创建如下常量:

public static final ExportType TYPE_1 = new ExportType(..., ...);

但我想以某种方式实现它,以便将来可以添加新的组合/类型。

4

3 回答 3

1

最好的设计模式是使用为所有东西返回接口的工厂。然后你可以抽象出所有的实现,让你可以灵活地扩展和改变你的系统。

Spring 依赖注入是一个非常好的解决方案

你最大的问题可能在数据库级别,这更难抽象

于 2012-06-21T13:45:12.807 回答
0

您可以使用 AbstractFactory: http ://en.wikipedia.org/wiki/Abstract_factory_pattern

有关您计划使用这些方式的更多详细信息可能会有所帮助。

于 2012-06-21T13:47:03.153 回答
0

为了尽可能灵活,不要使用具体类。使用界面。

我建议 Spring IoC 在 ExportType 中注入不同的 FetchingStrategy 和 ExportStrategy 实现。

public class SomeExportType implements IExportType{

    protected String name;
    @Autowired(@Qualifier="SomeFetchingStrategy")      
    protected IFetchingStrategy fetchStg;
    @Autowired(@Qualifier="SomeExportStrategy")      
    protected IExportStrategy exportStg;



    // ...
}

public interface IExportType {
     public void doSomething();  //
}

public interface IFetchingStrategy {
   public void fetch();
}

public class SomeFetchingStrategy implements IFetchingStrategy {

    public void fetch() {
        //implement this strategy
    }

}
于 2012-06-21T14:01:15.490 回答