feat : Design Pattern - 옵저버(Observer) 패턴 구현
This commit is contained in:
@@ -115,6 +115,13 @@
|
|||||||
|
|
||||||
### 옵저버(Observer) 패턴
|
### 옵저버(Observer) 패턴
|
||||||
|
|
||||||
|
#### 구현 요구사항
|
||||||
|
|
||||||
|
- 주문의 상태가 변경되면 배송팀과 운영팀에 알리고, 각각의 팀은 그에 따른 조치를 취한다.
|
||||||
|
- 배송팀은 배송을 시작한다.
|
||||||
|
- 운영팀은 고객에게 메시지를 전송한다.
|
||||||
|
- 배송팀과 운영팀 외에 다른 팀에도 필요하다면 또 다른 팀에 메시지를 전송해야 할 수도 있다.
|
||||||
|
|
||||||
### 미디에이터(Mediator) 패턴
|
### 미디에이터(Mediator) 패턴
|
||||||
|
|
||||||
### 파사드(Facade) 패턴
|
### 파사드(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