feat : Design Pattern - 미디에이터(Mediator) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-14 10:47:38 +09:00
parent c93ab002c0
commit 86cd9824de
12 changed files with 126 additions and 0 deletions

View File

@@ -124,6 +124,12 @@
### 미디에이터(Mediator) 패턴
#### 구현 요구사항
- 가전제품의 전원을 제어한다.
- 가전제품의 전원은 하나만 켤 수 있고, 하나를 켜면 나머지는 모두 꺼진다.
- 가전제품을 켤 경우, 해당 가전제품의 이름을 메시지로 전송한다.
### 파사드(Facade) 패턴
#### 구현 요구사항

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
class AirConditioner(override val name: String) : HomeAppliance {
override fun turnOn() {
println("${name}을 켭니다.")
}
override fun turnOff() {
println("${name}을 끕니다.")
}
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
interface HomeAppliance {
val name: String
fun turnOn()
fun turnOff()
}

View File

@@ -0,0 +1,12 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
class HomeApplianceApplication
fun main() {
val airConditioner = AirConditioner("에어컨")
val television = Television("텔레비전")
val messageSender = MessageSender()
val remoteControl = RemoteControl(listOf(airConditioner, television), messageSender)
remoteControl.turnOn(airConditioner)
}

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
class MessageSender {
fun sendMessage(homeAppliance: HomeAppliance) {
println("메시지 : ${homeAppliance.name}을 켰습니다.")
}
}

View File

@@ -0,0 +1,17 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
class RemoteControl(
private val homeAppliances: List<HomeAppliance>,
private val messageSender: MessageSender
) {
fun turnOn(homeAppliance: HomeAppliance) {
homeAppliances.filterNot { it == homeAppliance }
.forEach { it.turnOff() }
homeAppliance.turnOn()
messageSender.sendMessage(homeAppliance)
}
fun turnOff(homeAppliance: HomeAppliance) {
homeAppliance.turnOff()
}
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
class Television(override val name: String) : HomeAppliance {
override fun turnOn() {
println("${name}을 켭니다.")
}
override fun turnOff() {
println("${name}을 끕니다.")
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
class AirConditioner(override val name: String) : HomeAppliance {
override fun turnOnBut(homeAppliance: HomeAppliance, messageSender: MessageSender) {
homeAppliance.turnOff()
println("${name}을 켭니다.")
messageSender.sendMessage(this)
}
override fun turnOff() {
println("${name}을 끕니다.")
}
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
interface HomeAppliance {
val name: String
fun turnOnBut(homeAppliance: HomeAppliance, messageSender: MessageSender)
fun turnOff()
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
class HomeApplianceApplication
fun main() {
val airConditioner = AirConditioner("에어컨")
val television = Television("텔레비전")
val messageSender = MessageSender()
airConditioner.turnOnBut(television, messageSender)
}

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
class MessageSender {
fun sendMessage(homeAppliance: HomeAppliance) {
println("메시지 : ${homeAppliance.name}을 켰습니다.")
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
class Television(override val name: String) : HomeAppliance {
override fun turnOnBut(homeAppliance: HomeAppliance, messageSender: MessageSender) {
homeAppliance.turnOff()
println("${name}을 켭니다.")
messageSender.sendMessage(this)
}
override fun turnOff() {
println("${name}을 끕니다.")
}
}