class Report( | |
val women: List<Person>, | |
val men: List<Person> | |
) { | |
fun isEmpty(): Boolean { | |
return women.isEmpty() && men.isEmpty() | |
} | |
} | |
abstract class ReportGenerator( | |
private val repository: Repository | |
) { | |
fun create(): Report { | |
val people = repository.fetchAllPeople() | |
val rawReport = splitByGender(people) | |
if (rawReport.isEmpty()) { | |
return rawReport | |
} | |
val filteredReport = filter(rawReport) | |
return sortByName(filteredReport) | |
} | |
abstract fun filter(report: Report): Report | |
// ... | |
} | |
class AdultsReportGenerator(repository: Repository) : ReportGenerator(repository) { | |
override fun filter(report: Report): Report { | |
val over21 = { person: Person -> person.age > 21 } | |
return Report( | |
report.women.filter(over21), | |
report.men.filter(over21) | |
) | |
} | |
} | |
// example: | |
val generator = AdultsReportGenerator(repository) | |
val reportWithPeopleOver21 = generator.create() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment