feat : Design Pattern - 미디에이터(Mediator) 패턴 구현
This commit is contained in:
@@ -124,6 +124,12 @@
|
||||
|
||||
### 미디에이터(Mediator) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 가전제품의 전원을 제어한다.
|
||||
- 가전제품의 전원은 하나만 켤 수 있고, 하나를 켜면 나머지는 모두 꺼진다.
|
||||
- 가전제품을 켤 경우, 해당 가전제품의 이름을 메시지로 전송한다.
|
||||
|
||||
### 파사드(Facade) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
@@ -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}을 끕니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
|
||||
|
||||
interface HomeAppliance {
|
||||
val name: String
|
||||
|
||||
fun turnOn()
|
||||
|
||||
fun turnOff()
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.after
|
||||
|
||||
class MessageSender {
|
||||
fun sendMessage(homeAppliance: HomeAppliance) {
|
||||
println("메시지 : ${homeAppliance.name}을 켰습니다.")
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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}을 끕니다.")
|
||||
}
|
||||
}
|
||||
@@ -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}을 끕니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
|
||||
|
||||
interface HomeAppliance {
|
||||
val name: String
|
||||
|
||||
fun turnOnBut(homeAppliance: HomeAppliance, messageSender: MessageSender)
|
||||
|
||||
fun turnOff()
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.mediator.before
|
||||
|
||||
class MessageSender {
|
||||
fun sendMessage(homeAppliance: HomeAppliance) {
|
||||
println("메시지 : ${homeAppliance.name}을 켰습니다.")
|
||||
}
|
||||
}
|
||||
@@ -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}을 끕니다.")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user