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
15 changes: 15 additions & 0 deletions src/main/kotlin/builder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
data class Person(val firstName: String, val lastName: String)

class PersonBuilder {

private lateinit var firstName: String
private lateinit var lastName: String

fun firstName(value: String) = this.also { firstName = value }

fun lastName(value: String) = this.also { lastName = value }

fun build() = Person(firstName, lastName)
}

fun main() = println(PersonBuilder().firstName("John").lastName("Smith").build())
31 changes: 31 additions & 0 deletions src/main/kotlin/command.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
interface Command {
fun execute()
fun cancel()
fun name(): String
}

class Shell {
fun launch(c: Command) = c.execute()
}

class SumNumbersCommand(private vararg val args: Double?) : Command {
override fun execute() = println(args.filterNotNull().sum())

override fun cancel() = TODO("Not yet implemented")

override fun name(): String = "sum"
}

class SortNumbersCommand(private vararg val args: Int?) : Command {
override fun execute() = println(args.filterNotNull().sorted())

override fun cancel() = TODO("Not yet implemented")

override fun name(): String = "sort"
}

fun main() {
val shell = Shell()
shell.launch(SumNumbersCommand(2.5, 3.5, 8.4))
shell.launch(SortNumbersCommand(3, 1, 2))
}
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 @@
abstract class MenuItem(private val previous: MenuItem?) {
fun process(name: String): String =
"${previous?.let { "${it.process(name)}, " } ?: "$name's dinner: "}${serve()}"

protected abstract fun serve(): String
}

class Soup(previous: MenuItem? = null) : MenuItem(previous) {
override fun serve(): String = "soup"
}

class Salad(previous: MenuItem? = null) : MenuItem(previous) {
override fun serve(): String = "salad"
}

class Entree(previous: MenuItem? = null) : MenuItem(previous) {
override fun serve(): String = "entree"
}

class Dessert(previous: MenuItem? = null) : MenuItem(previous) {
override fun serve(): String = "dessert"
}

fun main() {
println(Dessert(Entree(Salad(Soup()))).process("Anton"))
println(Dessert(Salad()).process("Maria"))
}
11 changes: 11 additions & 0 deletions src/main/kotlin/singleton.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class Singleton private constructor() {

fun sayHello() = println("Hello from singleton")

companion object {
val INSTANCE by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { Singleton() }
}

}

fun main() = Singleton.INSTANCE.sayHello()