From 078cab3301ce2aff7ae5b63c149f54bc6e6aca4c Mon Sep 17 00:00:00 2001 From: Andrey Efimov Date: Wed, 3 May 2023 00:31:29 +0300 Subject: [PATCH 1/9] homework 2 --- src/main/kotlin/Builder.kt | 55 ++++++++++++++++++++++++++++++++++++ src/main/kotlin/Command.kt | 30 ++++++++++++++++++++ src/main/kotlin/Decorator.kt | 27 ++++++++++++++++++ src/main/kotlin/Singleton.kt | 9 ++++++ 4 files changed, 121 insertions(+) create mode 100644 src/main/kotlin/Builder.kt create mode 100644 src/main/kotlin/Command.kt create mode 100644 src/main/kotlin/Decorator.kt create mode 100644 src/main/kotlin/Singleton.kt 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/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 From bf96a5ab441f401021f5023b868a4a5571cff7da Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Wed, 10 May 2023 15:58:46 +0300 Subject: [PATCH 2/9] Update and rename Singleton.kt to Singletone.kt --- src/main/kotlin/Singleton.kt | 9 --------- src/main/kotlin/Singletone.kt | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 src/main/kotlin/Singleton.kt create mode 100644 src/main/kotlin/Singletone.kt diff --git a/src/main/kotlin/Singleton.kt b/src/main/kotlin/Singleton.kt deleted file mode 100644 index fcb980f..0000000 --- a/src/main/kotlin/Singleton.kt +++ /dev/null @@ -1,9 +0,0 @@ -class Singleton private constructor() { - companion object { - val shared: Singleton by lazy { Singleton() } - } - - init { - print("Singleton Init") - } -} \ No newline at end of file diff --git a/src/main/kotlin/Singletone.kt b/src/main/kotlin/Singletone.kt new file mode 100644 index 0000000..0716c17 --- /dev/null +++ b/src/main/kotlin/Singletone.kt @@ -0,0 +1,17 @@ +class Singl { + object ManagerDriver{ + init { + println("Manager Initialized: $this") + } + fun log():ManagerDriver = apply { println("Manager Driver: $this") } + } +} + +class Test{ + @org.junit.jupiter.api.Test + fun testsingl(){ + println("Start") + val ManagerDriver1:Singl.ManagerDriver = Singl.ManagerDriver.log() + val ManagerDriver2:Singl.ManagerDriver = Singl.ManagerDriver.log() + } +} From e1729c51067277f396d0e586118965db637e34b9 Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Wed, 10 May 2023 16:36:35 +0300 Subject: [PATCH 3/9] Homework2 Builder.kt --- src/main/kotlin/Builder.kt | 77 ++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/main/kotlin/Builder.kt b/src/main/kotlin/Builder.kt index 386e5ef..aff0f9c 100644 --- a/src/main/kotlin/Builder.kt +++ b/src/main/kotlin/Builder.kt @@ -1,55 +1,58 @@ -class DrinkItem(var description: String = "drink") +class BilderCocktail (var composition: String = "drink") -class DrinkBuilder { - private var drink = DrinkItem() - fun reset() = apply { - drink = DrinkItem() - } + class DrinkBuilder { + private var drink = BilderCocktail() - fun build(): DrinkItem { return drink } + fun reset() = apply { + drink = BilderCocktail() + } - fun addColdWater() = apply { - drink.description += " & cold water" - } + fun build(): BilderCocktail { return drink } - fun addHotWater() = apply { - drink.description += " & hot water" - } + fun addWater() = apply { + drink.composition += "Water" + } - fun addBlackTea() = apply { - drink.description += " & black tea" - } + fun addIce() = apply { + drink.composition += "ICE" + } + fun addVodka() = apply { + drink.composition += "VODKA" + } - fun addIce() = apply { - drink.description += " & ice" - } + fun addTomato() = apply { + drink.composition += "Tomato" + } + + fun addWhisky() = apply { + drink.composition += "Whisky" + } + + fun addCocaCola() = apply { + drink.composition += "CocaCola" + } - fun addSugar() = apply { - drink.description += " & sugar" - } - fun addFruits() = apply { - drink.description += " & fruits" } -} -class Director() { - fun makeShake(builder: DrinkBuilder): DrinkItem { - return builder + class Director() { + fun makeDrink1(builder: DrinkBuilder): BilderCocktail { + return builder .reset() + .addWhisky() + .addCocaCola() + .addWater() .addIce() - .addFruits() - .addSugar() .build() - } + } - fun makeTea(builder: DrinkBuilder): DrinkItem { - return builder + fun makeBloodMary(builder: DrinkBuilder): BilderCocktail { + return builder .reset() - .addHotWater() - .addBlackTea() - .addSugar() + .addVodka() + .addTomato() + .addWater() .build() + } } -} \ No newline at end of file From 47d601dcf8ba9e8a314446166128c59367ee2e54 Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Wed, 10 May 2023 16:37:18 +0300 Subject: [PATCH 4/9] Rename Singletone.kt to Homework2 Singletone.kt --- src/main/kotlin/{Singletone.kt => Homework2 Singletone.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/kotlin/{Singletone.kt => Homework2 Singletone.kt} (100%) diff --git a/src/main/kotlin/Singletone.kt b/src/main/kotlin/Homework2 Singletone.kt similarity index 100% rename from src/main/kotlin/Singletone.kt rename to src/main/kotlin/Homework2 Singletone.kt From 3040327237a266d84e244da430d0f9a1336aba6f Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Wed, 10 May 2023 16:54:08 +0300 Subject: [PATCH 5/9] Homework02 Decorator.kt --- src/main/kotlin/Decorator.kt | 41 +++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/Decorator.kt b/src/main/kotlin/Decorator.kt index d380927..a93e54c 100644 --- a/src/main/kotlin/Decorator.kt +++ b/src/main/kotlin/Decorator.kt @@ -1,27 +1,30 @@ -interface Drink { - fun getDescription(): String -} +class decorator { + interface Drink { + fun getComposition(): String + } -class Shake: Drink { - override fun getDescription(): String { - return "Shake" + class Cocktail: Drink { + override fun getComposition(): String { + return "Cocktail" + } } -} -class MangoDecorator(private val drink: Drink): Drink { - override fun getDescription(): String { - return drink.getDescription() + " & mango" + class WithVodka(private val drink: Drink): Drink { + override fun getComposition(): String { + return drink.getComposition() + "Vodka" + } } -} -class PassionFruitDecorator(private val drink: Drink): Drink { - override fun getDescription(): String { - return drink.getDescription() + " & passion fruit" + class WithWiskey(private val drink: Drink): Drink { + override fun getComposition(): String { + return drink.getComposition() + "Wiskey" + } } -} -class SugarDecorator(private val drink: Drink): Drink { - override fun getDescription(): String { - return drink.getDescription() + " & sugar" + class WithIce(private val drink: Drink): Drink { + override fun getComposition(): String { + return drink.getComposition() + "with Ice" + } } -} \ No newline at end of file + +} From 5d169e2cc86851fce041a4cccf381665a66c5368 Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Thu, 11 May 2023 12:49:55 +0300 Subject: [PATCH 6/9] Update and rename Command.kt to Homework2 Command.kt --- src/main/kotlin/Command.kt | 30 ----------------- src/main/kotlin/Homework2 Command.kt | 49 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 30 deletions(-) delete mode 100644 src/main/kotlin/Command.kt create mode 100644 src/main/kotlin/Homework2 Command.kt diff --git a/src/main/kotlin/Command.kt b/src/main/kotlin/Command.kt deleted file mode 100644 index fad463c..0000000 --- a/src/main/kotlin/Command.kt +++ /dev/null @@ -1,30 +0,0 @@ -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/Homework2 Command.kt b/src/main/kotlin/Homework2 Command.kt new file mode 100644 index 0000000..2e77e56 --- /dev/null +++ b/src/main/kotlin/Homework2 Command.kt @@ -0,0 +1,49 @@ +interface Command { + fun execute() +} +class Alfavit { + fun firstlit() { + println("А") + } + fun secondlit() { + println("Б") + } + fun thirdlit() { + println("В") + } + +} +class FirstLit(private val string: Alfavit) : Command { + override fun execute() { + string.firstlit() + } +} +class SecondLit(private val string: Alfavit) : Command { + override fun execute() { + string.secondlit() + } + +} +class ThirdLit(private val string: Alfavit) : Command { + override fun execute() { + string.thirdlit() + } +class Invoker (var command: Command) { + fun doExecute() { + command.execute() + } +} +fun main() { + val alfavit = Alfavit() + val firstLit = FirstLit(alfavit) + val secondLit = SecondLit(alfavit) + val thirdLit = ThirdLit(alfavit) + val invoker = Invoker(firstLit) + invoker.doExecute() + invoker.command = secondLit + invoker.doExecute() + invoker.command = thirdLit + invoker.doExecute() + +} +} From 2114cf77f0a43196f4165f2a53cabd13f45769df Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Thu, 11 May 2023 12:50:42 +0300 Subject: [PATCH 7/9] Rename Decorator.kt to Homework2 Decorator.kt --- src/main/kotlin/{Decorator.kt => Homework2 Decorator.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/kotlin/{Decorator.kt => Homework2 Decorator.kt} (100%) diff --git a/src/main/kotlin/Decorator.kt b/src/main/kotlin/Homework2 Decorator.kt similarity index 100% rename from src/main/kotlin/Decorator.kt rename to src/main/kotlin/Homework2 Decorator.kt From 45b32c9cae7994076ab903a12576fbd199231292 Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Thu, 11 May 2023 12:51:24 +0300 Subject: [PATCH 8/9] Rename Builder.kt to Homework2 Builder.kt --- src/main/kotlin/{Builder.kt => Homework2 Builder.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/kotlin/{Builder.kt => Homework2 Builder.kt} (100%) diff --git a/src/main/kotlin/Builder.kt b/src/main/kotlin/Homework2 Builder.kt similarity index 100% rename from src/main/kotlin/Builder.kt rename to src/main/kotlin/Homework2 Builder.kt From c1c7919ab81f43cf806d78513452a079af5c4a57 Mon Sep 17 00:00:00 2001 From: Kriktunov <130924321+Kriktunov@users.noreply.github.com> Date: Sun, 14 May 2023 20:05:05 +0300 Subject: [PATCH 9/9] Update Homework2 Singletone.kt --- src/main/kotlin/Homework2 Singletone.kt | 46 ++++++++++++++++++------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/Homework2 Singletone.kt b/src/main/kotlin/Homework2 Singletone.kt index 0716c17..092bd11 100644 --- a/src/main/kotlin/Homework2 Singletone.kt +++ b/src/main/kotlin/Homework2 Singletone.kt @@ -1,17 +1,39 @@ -class Singl { - object ManagerDriver{ - init { - println("Manager Initialized: $this") +// class Singl { +// object ManagerDriver{ +// init { +// println("Manager Initialized: $this") +// } +// fun log():ManagerDriver = apply { println("Manager Driver: $this") } +// } +// } + +// class Test{ +// @org.junit.jupiter.api.Test +// fun testsingl(){ +// println("Start") +// val ManagerDriver1:Singl.ManagerDriver = Singl.ManagerDriver.log() +// val ManagerDriver2:Singl.ManagerDriver = Singl.ManagerDriver.log() +// } +// } + +package ru.otus.empty + +class Singl1 private constructor() { + + init { + println("Singl1 done") + } + + companion object { + val instance: Singl1 by lazy { + Singl1() } - fun log():ManagerDriver = apply { println("Manager Driver: $this") } } + + } +fun main() { + + val testSingl1 = Singl1.instance -class Test{ - @org.junit.jupiter.api.Test - fun testsingl(){ - println("Start") - val ManagerDriver1:Singl.ManagerDriver = Singl.ManagerDriver.log() - val ManagerDriver2:Singl.ManagerDriver = Singl.ManagerDriver.log() - } }