diff --git a/src/main/kotlin/Builder.kt b/src/main/kotlin/Builder.kt new file mode 100644 index 0000000..386e5ef --- /dev/null +++ b/src/main/kotlin/Builder.kt @@ -0,0 +1,55 @@ +class DrinkItem(var description: String = "drink") + +class DrinkBuilder { + private var drink = DrinkItem() + + fun reset() = apply { + drink = DrinkItem() + } + + fun build(): DrinkItem { return drink } + + fun addColdWater() = apply { + drink.description += " & cold water" + } + + fun addHotWater() = apply { + drink.description += " & hot water" + } + + fun addBlackTea() = apply { + drink.description += " & black tea" + } + + fun addIce() = apply { + drink.description += " & ice" + } + + fun addSugar() = apply { + drink.description += " & sugar" + } + + fun addFruits() = apply { + drink.description += " & fruits" + } +} + +class Director() { + fun makeShake(builder: DrinkBuilder): DrinkItem { + return builder + .reset() + .addIce() + .addFruits() + .addSugar() + .build() + } + + fun makeTea(builder: DrinkBuilder): DrinkItem { + return builder + .reset() + .addHotWater() + .addBlackTea() + .addSugar() + .build() + } +} \ No newline at end of file diff --git a/src/main/kotlin/Command.kt b/src/main/kotlin/Command.kt new file mode 100644 index 0000000..fad463c --- /dev/null +++ b/src/main/kotlin/Command.kt @@ -0,0 +1,30 @@ +interface DrinkMakerCommand { + fun execute() +} + +class FruitsAddCommand(private val drinkId: String): DrinkMakerCommand { + override fun execute() = println("Adding fruits to drink id: $drinkId") +} + +class IceAddCommand(private val drinkId: String): DrinkMakerCommand { + override fun execute() = println("Adding ice to drink id: $drinkId") +} + +class WaterAddCommand(private val drinkId: String): DrinkMakerCommand { + override fun execute() = println("Adding water to drink id: $drinkId") +} + +class DrinkCommandProcessor { + private val queue = ArrayList() + + fun addToQueue(command: DrinkMakerCommand): DrinkCommandProcessor = + apply { + queue.add(command) + } + + fun processCommands(): DrinkCommandProcessor = + apply { + queue.forEach { it.execute() } + queue.clear() + } +} \ No newline at end of file diff --git a/src/main/kotlin/Decorator.kt b/src/main/kotlin/Decorator.kt new file mode 100644 index 0000000..d380927 --- /dev/null +++ b/src/main/kotlin/Decorator.kt @@ -0,0 +1,27 @@ +interface Drink { + fun getDescription(): String +} + +class Shake: Drink { + override fun getDescription(): String { + return "Shake" + } +} + +class MangoDecorator(private val drink: Drink): Drink { + override fun getDescription(): String { + return drink.getDescription() + " & mango" + } +} + +class PassionFruitDecorator(private val drink: Drink): Drink { + override fun getDescription(): String { + return drink.getDescription() + " & passion fruit" + } +} + +class SugarDecorator(private val drink: Drink): Drink { + override fun getDescription(): String { + return drink.getDescription() + " & sugar" + } +} \ No newline at end of file diff --git a/src/main/kotlin/Homework.kt b/src/main/kotlin/Homework.kt new file mode 100644 index 0000000..1601eeb --- /dev/null +++ b/src/main/kotlin/Homework.kt @@ -0,0 +1,34 @@ +import kotlin.system.measureTimeMillis + +//Задание #1 +fun task1() { + (0..99) + .toList() //Создайте список и заполните его целыми числами 0-99 + .filter { it % 2 == 0 } //Удаляет из цепочки все нечетные числа + .slice(10..20) //Берет слайс с 10 по 20 элементы + .map { it + 1 } //Добавляет к каждому элементу 1 + .sum() //Суммирует все оставшиеся числа и возвращает сумму +} + +// Задание #2 + +// Реализуйте свой дата класс Person +// Добавьте в него следующие проперти name:String, surname:String, age:Int +data class Person(val name: String, val surname: String, val age: Int) + +// Реализуйте экстеншен функцию на список типизированный Person, которая сортирует список по возрасту в порядке убывания +fun List.sortByAge(): List { + return this.sortedByDescending { it.age } +} + +// Реализуйте экстеншен функцию на список типизированный Person, +// которая сортирует список в алфавитном порядке по имени. Если имена одинаковые, то учитывается фамилия +fun List.sortByName(): List { + return this.sortedWith(compareBy({ it.name }, { it.surname })) +} + +//Задание #3 +//Реализуйте функцию высшего порядка, которая вычисляет время выполнения функции-аргумента и возвращает результат результат в миллисекунд +fun calcFuncTime(func: ()-> Unit): Long { + return measureTimeMillis(func) +} \ No newline at end of file diff --git a/src/main/kotlin/Singleton.kt b/src/main/kotlin/Singleton.kt new file mode 100644 index 0000000..fcb980f --- /dev/null +++ b/src/main/kotlin/Singleton.kt @@ -0,0 +1,9 @@ +class Singleton private constructor() { + companion object { + val shared: Singleton by lazy { Singleton() } + } + + init { + print("Singleton Init") + } +} \ No newline at end of file