我有一个自定义对象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;
}
// ...
}
在我的应用程序中,我必须创建一个具有不同FetchingStrategy
和ExportStrategy
的导出类型列表。通过实施新的FetchingStrategy
和ExportStrategy
,可以在将来创建新的导出类型,因此我希望设计我的应用程序尽可能灵活。
我应该采用何种设计模式来获得我需要的东西?
为每个TypeFactory
特定实例创建不同的ExportType
是正确的方法吗?
更新
我尝试总结一下我的问题:我正在开发一个用于从数据库导出数据的Web应用程序。我有几种方法可以从数据库中提取数据(ExportType
s),这些类型是通过FetchingStrategy
和ExportStrategy
的不同组合获得的。现在我需要创建一个这些“组合”的列表,以便在必要时调用它们。我可以创建常量,如:
public static final ExportType TYPE_1 = new ExportType(..., ...);
但是我希望以某种方式实现它,以便我可以添加未来的新组合/类型。
答案 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
}
}