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
2 changes: 1 addition & 1 deletion .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

91 changes: 91 additions & 0 deletions src/main/kotlin/ru/otus/homework/Builder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package ru.otus.homework

//Строитель

interface CaseBuilder {
fun setClientName(clientName: String): CaseBuilder
fun setCaseType(caseType: String): CaseBuilder
fun setDescription(description: String): CaseBuilder
fun setDate(date: String): CaseBuilder
fun build(): LegalCase
}

data class LegalCase(
val clientName: String,
val caseType: String,
val description: String,
val date: String
) {
override fun toString(): String {
return "Заведено $caseType от $date на $clientName по статье $description"
}
}

class LegalCaseBuilder : CaseBuilder {
private lateinit var clientName: String
private lateinit var caseType: String
private lateinit var description: String
private lateinit var date: String


override fun setClientName(clientName: String): CaseBuilder {
this.clientName = clientName
return this
}

override fun setCaseType(caseType: String): CaseBuilder {
this.caseType = caseType
return this
}

override fun setDescription(description: String): CaseBuilder {
this.description = description
return this
}

override fun setDate(date: String): CaseBuilder {
this.date = date
return this
}

override fun build(): LegalCase {
return LegalCase(clientName, caseType, description, date)
}
}

fun main() {
val criminalCase = LegalCaseBuilder()
.setClientName("Иванов Иван")
.setCaseType("Уголовное дело")
.setDescription("Кража")
.setDate("18.04.2023")
.build()

val familyCase = LegalCaseBuilder()
.setClientName("Петров Петр")
.setCaseType("Семейное дело")
.setDescription("Развод")
.setDate("25.04.2023")
.build()

val civilCase = LegalCaseBuilder()
.setClientName("Сергеев Сергей")
.setCaseType("Гражданское дело")
.setDescription("Убытки")
.setDate("27.04.2023")
.build()

val administrativeCase = LegalCaseBuilder()
.setClientName("Николаев Николай")
.setCaseType("Административное дело")
.setDescription("Невменяемость")
.setDate("30.04.2023")
.build()

listOf(
criminalCase,
familyCase,
civilCase,
administrativeCase
).forEach { println(it) }
}
77 changes: 77 additions & 0 deletions src/main/kotlin/ru/otus/homework/Command.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package ru.otus.homework

//Команда

interface Command {
fun execute()
}

class LawOrganization {
fun handleCriminalCase() {
println("Обработка уголовного дела.")
}

fun handleFamilyCase() {
println("Обработка семейного дела.")
}

fun handleCivilCase() {
println("Обработка гражданского дела.")
}

fun handleAdministrativeCase() {
println("Обработка административного дела.")
}
}

class CriminalCaseCommand(private val lawOrganization: LawOrganization) : Command {
override fun execute() {
lawOrganization.handleCriminalCase()
}
}

class FamilyCaseCommand(private val lawOrganization: LawOrganization) : Command {
override fun execute() {
lawOrganization.handleFamilyCase()
}
}

class CivilCaseCommand(private val lawOrganization: LawOrganization) : Command {
override fun execute() {
lawOrganization.handleCivilCase()
}
}

class AdministrativeCaseCommand(private val lawOrganization: LawOrganization) : Command {
override fun execute() {
lawOrganization.handleAdministrativeCase()
}
}


class CaseInvoker(var command: Command) {
fun executeCommand() {
command.execute()
}
}

fun main() {
val lawOrganization = LawOrganization()

val criminalCaseCommand = CriminalCaseCommand(lawOrganization)
val familyCaseCommand = FamilyCaseCommand(lawOrganization)
val civilCaseCommand = CivilCaseCommand(lawOrganization)
val administrativeCaseCommand = AdministrativeCaseCommand(lawOrganization)

val caseInvoker = CaseInvoker(criminalCaseCommand)
caseInvoker.executeCommand()

caseInvoker.command = familyCaseCommand
caseInvoker.executeCommand()

caseInvoker.command = civilCaseCommand
caseInvoker.executeCommand()

caseInvoker.command = administrativeCaseCommand
caseInvoker.executeCommand()
}
62 changes: 62 additions & 0 deletions src/main/kotlin/ru/otus/homework/Decorator.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package ru.otus.homework

//Декоратор

interface LegalService {
fun handleCase()
}

class CriminalService : LegalService {
override fun handleCase() {
println("Обработка уголовного дела")
}
}

class FamilyService : LegalService {
override fun handleCase() {
println("Обработка семейного дела")
}
}

abstract class LegalServiceDecorator(private val legalService: LegalService) : LegalService {
override fun handleCase() {
legalService.handleCase()
}
}

class UrgentCaseDecorator(legalService: LegalService) : LegalServiceDecorator(legalService) {
private fun markAsUrgent() {
println("Дело помечено срочным")
}

override fun handleCase() {
markAsUrgent()
super.handleCase()
}
}

class ConfidentialCaseDecorator(legalService: LegalService) : LegalServiceDecorator(legalService) {
private fun applyConfidentiality() {
println("Дело обрабатывается конфиденциально")
}

override fun handleCase() {
applyConfidentiality()
super.handleCase()
}
}

fun main() {
val criminalService = CriminalService()
val urgentCriminalService = UrgentCaseDecorator(criminalService)
val familyService = FamilyService()
val confidentialFamilyService = ConfidentialCaseDecorator(familyService)
val urgentConfidentialFamilyService = UrgentCaseDecorator(confidentialFamilyService)

urgentCriminalService.handleCase()
println()
confidentialFamilyService.handleCase()
println()
urgentConfidentialFamilyService.handleCase()
}

46 changes: 46 additions & 0 deletions src/main/kotlin/ru/otus/homework/SingletonLazy.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package ru.otus.homework

//Одиночка

class LawService private constructor() {

init {
println("LawService создан")
}

fun handleCriminalCase() {
println("Обработка уголовного дела")
}

fun handleFamilyCase() {
println("Обработка семейного дела")
}

fun handleCivilCase() {
println("Обработка гражданского дела")
}

fun handleAdministrativeCase() {
println("Обработка административного дела")
}

companion object {
val instance: LawService by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { LawService() }
}
}

fun main() {
val lawService1 = LawService.instance
lawService1.handleCriminalCase()
lawService1.handleFamilyCase()
lawService1.handleCivilCase()
lawService1.handleAdministrativeCase()

val lawService2 = LawService.instance
lawService2.handleCriminalCase()
lawService2.handleFamilyCase()
lawService2.handleCivilCase()
lawService2.handleAdministrativeCase()

println(lawService1 === lawService2)
}