Реализации на Kotlin
Factory method
Общая реализация на языке Kotlin
Реализация классов машин
interface ICar {
val model: String
fun drive()
fun getDescription(): String
}
class Audi: ICar {
override val model: String = "A7"
override fun drive() {
println("Rides like an iron")
}
override fun getDescription(): String = "Brand: Audi, model: A7, revision: ${this.hashCode()}"
}
class Bmw: ICar {
override val model: String = "3 series"
override fun drive() {
println("No one knows when the driver will change lanes")
}
override fun getDescription(): String = "Brand: Bmw, model: 3 series, revision: ${this.hashCode()}"
}
open class Bugatti protected constructor(): ICar {
override val model: String = "Chiron"
override fun drive() {
println("Drive like a boss")
}
override fun getDescription(): String = "Brand: Bugatti, model: Chiron, revision: ${this.hashCode()}"
}
Реализация классов фабрик машин
abstract class CarFactory {
abstract fun createCar(): ICar
}
class AudiFactory: CarFactory() {
override fun createCar(): Audi = Audi()
}
class BmwFactory: CarFactory() {
override fun createCar(): Bmw {
return Bmw()
}
}
class BugattiFactory : CarFactory() {
override fun createCar(): Bugatti {
class ConcreteBugatti : Bugatti()
return ConcreteBugatti()
}
}
fun main() {
val audi = Audi() // можно создавать объект там где необходимо
val audiFactory: CarFactory = AudiFactory()
val audi1 = audiFactory.createCar()
println(audi1.getDescription())
audi1.drive()
val audi2 = audiFactory.createCar()
println(audi2.getDescription())
audi2.drive()
val bmw = Bmw() // можно создавать объект там где необходимо
val bmwFactory: CarFactory = BmwFactory()
val bmw1 = bmwFactory.createCar()
println(bmw1.getDescription())
bmw1.drive()
// val bugatti = Bugatti() // ошибка компиляции, нельзя вызвать protected constructor
val bugattiFactory = BugattiFactory()
val bugatti1: Bugatti = bugattiFactory.createCar()
println(bugatti1.getDescription())
bugatti1.drive()
val bugatti2: Bugatti = bugattiFactory.createCar()
println(bugatti2.getDescription())
bugatti2.drive()
}
Last updated
Was this helpful?