feat : Design Pattern - 옵저버(Observer) 패턴 구현
This commit is contained in:
@@ -115,6 +115,13 @@
|
||||
|
||||
### 옵저버(Observer) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 주문의 상태가 변경되면 배송팀과 운영팀에 알리고, 각각의 팀은 그에 따른 조치를 취한다.
|
||||
- 배송팀은 배송을 시작한다.
|
||||
- 운영팀은 고객에게 메시지를 전송한다.
|
||||
- 배송팀과 운영팀 외에 다른 팀에도 필요하다면 또 다른 팀에 메시지를 전송해야 할 수도 있다.
|
||||
|
||||
### 미디에이터(Mediator) 패턴
|
||||
|
||||
### 파사드(Facade) 패턴
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class DeliveryTeam : Team {
|
||||
override val name: String
|
||||
get() = "배송팀"
|
||||
|
||||
override fun onNotice(state: OrderState) {
|
||||
println("$name : 주문이 ${state.description} 상태로 변경되었네요. 배송을 시작합니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class ManageTeam : Team {
|
||||
override val name: String
|
||||
get() = "운영팀"
|
||||
|
||||
override fun onNotice(state: OrderState) {
|
||||
println("$name : 주문이 ${state.description} 상태로 변경되었네요. 소비자에게 메시지를 전송합니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class Order(
|
||||
private var state: OrderState = OrderState.RECEIVED,
|
||||
private val teams: MutableList<Team> = mutableListOf()
|
||||
) {
|
||||
fun addTeam(team: Team) {
|
||||
this.teams.add(team)
|
||||
}
|
||||
|
||||
fun removeTeam(team: Team) {
|
||||
this.teams.remove(team)
|
||||
}
|
||||
|
||||
fun changeState(state: OrderState) {
|
||||
this.state = state
|
||||
teams.forEach { it.onNotice(state) }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class OrderApplication
|
||||
|
||||
fun main() {
|
||||
val order = Order()
|
||||
order.addTeam(DeliveryTeam())
|
||||
order.addTeam(ManageTeam())
|
||||
order.changeState(OrderState.DELIVERY_READY_COMPLETE)
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
interface Team {
|
||||
val name: String
|
||||
|
||||
fun onNotice(state: OrderState)
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class DeliveryTeam {
|
||||
fun doDelivery(state: OrderState) {
|
||||
println("배송팀 : 주문이 ${state.description} 상태로 변경되었네요. 배송을 시작합니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class ManageTeam {
|
||||
fun sendMessage(state: OrderState) {
|
||||
println("운영팀 : 주문이 ${state.description} 상태로 변경되었네요. 소비자에게 메시지를 전송합니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class Order(
|
||||
private var state: OrderState = OrderState.RECEIVED,
|
||||
private val deliveryTeam: DeliveryTeam,
|
||||
private val manageTeam: ManageTeam
|
||||
) {
|
||||
fun changeState(state: OrderState) {
|
||||
this.state = state
|
||||
deliveryTeam.doDelivery(state)
|
||||
manageTeam.sendMessage(state)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.observer.common.OrderState
|
||||
|
||||
class OrderApplication
|
||||
|
||||
fun main() {
|
||||
val order = Order(state = OrderState.RECEIVED, DeliveryTeam(), ManageTeam())
|
||||
order.changeState(OrderState.DELIVERY_READY_COMPLETE)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.observer.common
|
||||
|
||||
enum class OrderState(
|
||||
val description: String
|
||||
) {
|
||||
RECEIVED("접수됨"),
|
||||
DELIVERY_READY_COMPLETE("배송 준비")
|
||||
}
|
||||
Reference in New Issue
Block a user