创建同一个类的不同实例,哪个设计模式?

时间:2012-06-21 13:41:21

标签: java design-patterns

我有一个自定义对象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的导出类型列表。通过实施新的FetchingStrategyExportStrategy,可以在将来创建新的导出类型,因此我希望设计我的应用程序尽可能灵活。

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

更新

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

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

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

3 个答案:

答案 0 :(得分:1)

最佳设计模式是使用返回所有内容接口的工厂。您可以抽象出所有实现,从而允许您灵活地扩展和更改系统。

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

您最大的问题可能是数据库级别,这很难抽象

答案 1 :(得分:0)

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

有关您计划使用这些内容的详细信息可能有所帮助。

答案 2 :(得分: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
    }

}