設計上の問題が発生しました。おそらく、決定を手伝ってくれるでしょう。
私のクライアント オブジェクトは、クラスのオブジェクトのセットを要求できます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() {...}
}
これは、いわゆる単純な Factory パターンの正しい使用法ですか? または、他の提案はありますか?
** 編集 **
以下のいくつかのコメントは、それは正確には Factory パターンではないと言っています。そうでない場合、どうすればそれを呼び出すことができますか?