Фабричный метод

Фабричный метод

Реализовала на котлине еще один паттерн проектирования - фабричный метод. Очень похож на абстрактную фабрику - но в упрощенном виде. Для реализации пришлось немного урезать код одного из моих прошлый постов

Использовать спринг - одно удовольствие. Не приходится задумываться о создании и связи объектов, спринг все сделает сам. А еще сегодня узнала что можно внедрить не список бинов а мапу - тогда можно будет обращаться к бинам по их имени. В коде это reportCreators

@RestController class MyController ( val reportCreators: Map<String, ReportCreator> ){ @GetMapping fun createReport( @RequestParam format: ReportFormat, @RequestParam data: String ) : String { val report = reportCreators["reportCreator$format"]?.createReport(data) report?.let { return report.show() } return "Не удалось построить отчет" } } enum class ReportFormat {Xlsx, Pdf} interface Report { fun show() : String } class ReportXlsx(val data: String) : Report{ override fun show() : String = "Report. Format xlsx. Data: $data" } class ReportPdf(val data: String) : Report{ override fun show() : String = "Report. Format pdf. Data: $data" } interface ReportCreator { fun createReport(data: String) : Report } @Component class ReportCreatorXlsx: ReportCreator { override fun createReport(data: String) = ReportXlsx(data) } @Component class ReportCreatorPdf : ReportCreator { override fun createReport(data: String) = ReportPdf(data) }
4
Начать дискуссию