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

Abstract factory

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

Определение общего интерфейса инструментов

interface ITool {
    fun use()
}

Непосредственная реализация конкретных видов инструментов

abstract class AbstractHacksaw(
    private val type: String,
    private val name: String = SAW_NAME
) : ITool {
    override fun use() {
        println("Instrument: $name can be used for $type")
    }

    companion object {
        protected const val SAW_NAME: String = "Saw"
    }
}
class MetalHacksaw : AbstractHacksaw(SAW_TYPE) {
    companion object {
        private const val SAW_TYPE = "Metal"
    }
}
class WoodHacksaw : AbstractHacksaw(SAW_TYPE) {
    companion object {
        private const val SAW_TYPE = "Wood"
    }
}
abstract class AbstractHammer(
    private val type: String,
    private val name: String = HAMMER_NAME
) : ITool {
    override fun use() {
        println("Instrument: $name can be used for $type")
    }

    companion object {
        protected const val HAMMER_NAME: String = "Hammer"
    }
}
class MetalHammer : AbstractHammer(HAMMER_TYPE) {
    companion object {
        private const val HAMMER_TYPE = "Metal"
    }
}
class WoodenHammer : AbstractHammer(HAMMER_TYPE) {
    companion object {
        private const val HAMMER_TYPE = "Wood"
    }
}

Реализация абстрактных фабрик инструментов

interface AbstractFactory {
    fun createHacksaw(): AbstractHacksaw
    fun createHammer(): AbstractHammer
}
class MetalFactory : AbstractFactory {
    override fun createHammer(): MetalHammer {
        return MetalHammer()
    }

    override fun createHacksaw(): MetalHacksaw {
        return MetalHacksaw()
    }
}
class WoodFactory : AbstractFactory {
    override fun createHammer(): WoodenHammer {
        return WoodenHammer()
    }

    override fun createHacksaw(): WoodHacksaw {
        return WoodHacksaw()
    }
}

Main

fun main() {
    val metalFactory = MetalFactory()
    val metalHammer: MetalHammer = metalFactory.createHammer()
    metalHammer.use()
    val metalHacksaw: MetalHacksaw = metalFactory.createHacksaw()
    metalHacksaw.use()

    val woodFactory = WoodFactory()
    val woodenHammer: WoodenHammer = woodFactory.createHammer()
    woodenHammer.use()
    val woodHacksaw: WoodHacksaw = woodFactory.createHacksaw()
    woodHacksaw.use()
}
PreviousРеализации на С++NextВозможные реализации для решения конкретных задач на С++

Last updated 1 year ago

Was this helpful?