Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions src/main/kotlin/Builder.kt
Original file line number Diff line number Diff line change
@@ -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()
}
}
30 changes: 30 additions & 0 deletions src/main/kotlin/Command.kt
Original file line number Diff line number Diff line change
@@ -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<DrinkMakerCommand>()

fun addToQueue(command: DrinkMakerCommand): DrinkCommandProcessor =
apply {
queue.add(command)
}

fun processCommands(): DrinkCommandProcessor =
apply {
queue.forEach { it.execute() }
queue.clear()
}
}
27 changes: 27 additions & 0 deletions src/main/kotlin/Decorator.kt
Original file line number Diff line number Diff line change
@@ -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"
}
}
34 changes: 34 additions & 0 deletions src/main/kotlin/Homework.kt
Original file line number Diff line number Diff line change
@@ -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<Person>.sortByAge(): List<Person> {
return this.sortedByDescending { it.age }
}

// Реализуйте экстеншен функцию на список типизированный Person,
// которая сортирует список в алфавитном порядке по имени. Если имена одинаковые, то учитывается фамилия
fun List<Person>.sortByName(): List<Person> {
return this.sortedWith(compareBy({ it.name }, { it.surname }))
}

//Задание #3
//Реализуйте функцию высшего порядка, которая вычисляет время выполнения функции-аргумента и возвращает результат результат в миллисекунд
fun calcFuncTime(func: ()-> Unit): Long {
return measureTimeMillis(func)
}
9 changes: 9 additions & 0 deletions src/main/kotlin/Singleton.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class Singleton private constructor() {
companion object {
val shared: Singleton by lazy { Singleton() }
}

init {
print("Singleton Init")
}
}