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

Decorator

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

interface ICoffee {
    val cost: Int
    fun makeCoffee()
}
class SimpleCoffee : ICoffee {

    override val cost: Int = BASE_COST

    override fun makeCoffee() {
        println("Simple coffee was made.")
    }

    companion object {
        private const val BASE_COST = 5
    }
}
abstract class CoffeeDecorator(private val coffee: ICoffee) : ICoffee {

    override val cost: Int = coffee.cost

    override fun makeCoffee() {
        coffee.makeCoffee()
    }
}
class MilkDecorator(coffee: ICoffee) : CoffeeDecorator(coffee) {

    override val cost: Int = super.cost + MILK_COST

    override fun makeCoffee() {
        println("Milk was added.")
    }

    companion object {
        private const val MILK_COST = 2
    }
}
class SugarDecorator(coffee: ICoffee) : CoffeeDecorator(coffee) {

    override val cost: Int = super.cost + SUGAR_COST

    override fun makeCoffee() {
        println("Sugar was added.")
    }

    companion object {
        private const val SUGAR_COST = 1
    }
}
fun main() {
    val simpleCoffee: ICoffee = SimpleCoffee()
    simpleCoffee.makeCoffee()
    println("Current cost of coffee is: ${simpleCoffee.cost}")

    val milkCoffee: ICoffee = MilkDecorator(simpleCoffee)
    milkCoffee.makeCoffee()
    println("Current cost of coffee is: ${milkCoffee.cost}")

    val milkAndSugarCoffee: ICoffee = SugarDecorator(milkCoffee)
    milkAndSugarCoffee.makeCoffee()
    println("Current cost of coffee is: ${milkAndSugarCoffee.cost}")
}
PreviousРеализации на С++NextКомпоновщик

Last updated 1 year ago

Was this helpful?