【发布时间】:2012-10-29 21:57:56
【问题描述】:
有设计问题,也许你可以帮忙决定。
我的客户对象可以请求Report 类的对象集。有一组定义的可用报告,根据客户的权限,不同的报告可以包含在返回的集合中。每个请求都会创建报告(每个客户都会在每个请求上获得全新的报告实例)。
我是否应该使用一种“工厂”来封装报告创建,如下所示:
public class ReportsFactory {
private UserPermissionsChecker permissionsChecker;
public Set<Report> createReports() {
Set<Report> reports = new HashSet<Report>();
if(permissionsChecker.hasAccessTo('report A')) {
reports.add(createReportA());
}
if(permissionsChecker.hasAccessTo('report B')) {
reports.add(createReportB());
}
if(permissionsChecker.hasAccessTo('report C')) {
reports.add(createReportC());
}
return reports;
}
private Report createReportA() {...}
private Report createReportB() {...}
private Report createReportC() {...}
}
这是对所谓的简单工厂模式的正确用法吗?或者您有其他建议吗?
** 编辑 **
下面的一些 cmets 说这不完全是工厂模式。如果不是,我怎么称呼它?
【问题讨论】:
-
我认为这没有任何问题。您怀疑自己的方法有什么具体原因吗?
-
那些重复的“如果”部分具有相同的模式:如果有资格,则创建。我想知道是否有更好的方法来封装它,例如遵循“告诉不问”的原则。但我认为这可能是过度设计。
-
那些
if包含在内部。如果您添加对更多报告的支持,则无需更改其他代码。所以恕我直言,这很好。
标签: java design-patterns factory-pattern