2011-04-01 55 views
1

所以我現在正在開發一個webapp(Seam + JSF/Facelets),我需要創建報告生成服務 - 目前有三種不同的報告類型和三種不同的報告類型格式。我希望你能提出一些好的模式就實現這個功能,這能救我的東西在ActionBean中,如:報告生成器 - 我需要一些聰明的設計模式;)

if (selectedFormat == pdf) { 
    pdfReportService.generateReportNr1(); 
} else if (selectedFormat == csv) { 
    csvReportService.generateReportNr1(); 
} else if [...] 

所以我想會有針對不同類型的報告爲方法,並ReportGenerator實現ReportGenerator接口不同的格式類型。但是如何將所有支持的格式實現合併到一個服務中,以便在沒有任何切換邏輯的情況下輕鬆地從動作bean中調用它?我應該將它們收集到一些常用的服務中,並公開一個List getSupportedFormats()方法嗎?給我你的想法:)

回答

2

我會使用abstract factory pattern,即爲每個支持的格式(如地圖格式 - >工廠)提供報告生成器(工廠)。然後選擇支持所選格式的工廠。