在Kotlin中,實現狀態模式需要定義一個狀態接口,然后為每個具體狀態創建一個類。接下來,你需要在上下文類中維護一個當前狀態的對象,并提供方法來切換狀態。以下是一個簡單的示例:
interface State {
fun handle(context: Context)
}
class ConcreteStateA : State {
override fun handle(context: Context) {
println("Handling in ConcreteStateA")
context.setState(ConcreteStateB())
}
}
class ConcreteStateB : State {
override fun handle(context: Context) {
println("Handling in ConcreteStateB")
context.setState(ConcreteStateA())
}
}
class Context {
private var state: State = ConcreteStateA()
fun setState(state: State) {
this.state = state
}
fun request() {
state.handle(this)
}
}
fun main() {
val context = Context()
context.request() // Output: Handling in ConcreteStateA
context.request() // Output: Handling in ConcreteStateB
context.request() // Output: Handling in ConcreteStateA
}
在這個示例中,我們定義了一個狀態接口State
,并創建了兩個具體狀態類ConcreteStateA
和ConcreteStateB
。Context
類維護一個當前狀態的對象,并提供一個request
方法來處理請求。當調用request
方法時,它會調用當前狀態對象的handle
方法,該方法會切換上下文的狀態。