🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на 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

Builder

Общая реализация на языке Kotlin

Реализация класса машины и ее компонентов

class Car(
    val body: Body,
    val engine: Engine,
    val suspension: Suspension
)
abstract class Body(val bodyType: String)

class SedanBody(bodyType: String) : Body(bodyType)
abstract class Engine(val capacity: Double)

class InternalCombustionEngine(capacity: Double) : Engine(capacity)
abstract class Suspension(val type: String)

class AirSuspension(type: String): Suspension(type)

Реализация Builder и Director

interface IBuilder {
    fun withBody(body: Body): IBuilder
    fun withEngine(engine: Engine): IBuilder
    fun withSuspension(suspension: Suspension): IBuilder
    fun build(): Car
}
class CamryBuilder : IBuilder {
    private var body: Body = SedanBody("sedan")
    private var engine: Engine = InternalCombustionEngine(2.5)
    private var suspension: Suspension = AirSuspension("mono-cylinder")

    override fun withBody(body: Body): CamryBuilder {
        this.body = body
        return this
    }

    override fun withEngine(engine: Engine): CamryBuilder {
        this.engine = engine
        return this
    }

    override fun withSuspension(suspension: Suspension): CamryBuilder {
        this.suspension = suspension
        return this
    }

    override fun build(): Car {
        return Car(
            body = body,
            engine = engine,
            suspension = suspension,
        )
    }
}
class Director(private val builder: IBuilder) {
    fun create(): Car = builder
        .withEngine(InternalCombustionEngine(3.5))
        .build()
}
fun main() {
    val director = Director(CamryBuilder())
    val camry = director.create()

    println(
        "Director created camry! " +
                "Body: ${camry.body.bodyType}, " +
                "engine: ${camry.engine.capacity}, " +
                "suspension: ${camry.suspension.type}"
    )
}
PreviousРеализации на С++NextОдиночка

Last updated 1 year ago

Was this helpful?