有設計問題,也許你可以幫助決定。這是工廠模式的正確用法嗎?
我的客戶端對象可以請求類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() {...}
}
就是所謂的簡單工廠模式的這種權利的使用?或者你有其他建議嗎?
**下面編輯**
一些評論說,這不正是工廠模式。如果不是,我怎麼稱呼它?
我沒有看到任何問題。你懷疑你的方法有什麼具體原因嗎? – Jesper
那些重複的「如果」部分有相同的模式:如果有資格然後創建。我想知道是否有更好的方法來封裝它,例如遵循「告訴別人」的原則。但我認爲那可能是過度工程。 – grafthez
這些'if'包含在內部。如果您添加對更多報告的支持,則不需要更改其他代碼。所以我認爲這很好。 – jgauffin