🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page

Was this helpful?

  1. Паттерны
  2. Порождающие паттерны
  3. Фабричный метод

Реализации на 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()
}
PreviousРеализации на С++NextВозможные реализации для решения конкретных задач на С++

Last updated 1 year ago

Was this helpful?