Фабричный метод
Реализовала на котлине еще один паттерн проектирования - фабричный метод. Очень похож на абстрактную фабрику - но в упрощенном виде. Для реализации пришлось немного урезать код одного из моих прошлый постов
Использовать спринг - одно удовольствие. Не приходится задумываться о создании и связи объектов, спринг все сделает сам. А еще сегодня узнала что можно внедрить не список бинов а мапу - тогда можно будет обращаться к бинам по их имени. В коде это 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)
}
Начать дискуссию