目录

行为型:状态模式

释义

状态模式,多个状态类,将状态类传入主体类,主体类会随着状态类不同而做不同的操作。

/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%EF%BC%9A%E7%8A%B6%E6%80%81%E6%A8%A1%E5%BC%8F.resources/BAEB38EF-CB2B-4943-8813-F600990A337A.png
状态模式
两种状态StartStateStopState传给主体类Subject使用,主体类根据状态的不同会做不同的操作。

状态类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
interface State {
    fun doAction(subject: Subject)
}

class StartState(
    var tag: String = "start"
) : State {
    // 将状态传给主体类
    fun doAction(subject: Subject) {
        subject.setState(this)
    }
}

class StopState(
    var tag: String = "stop"
) : State {
    // 将状态传给主体类
    fun doAction(subject: Subject) {
        subject.setState(this)
    }
}

主体类

1
2
3
class Subject(
    var state : State? = null
) {}

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
fun main() {

    // 状态类
    val startState: StartState = StartState()
    val stopState: StopState = StopState()
    // 主体类
    val subject: Subject = Subject()
    
    // 为subject设置状态为StartState
    startState.doAction(subject)
    // 输出StartState中的tag
    println(subject.state.tag)
    
    // 为subject设置状态为StopState
    stopState.doAction(subject)
    // 输出StopState中的tag
    println(subject.state.tag)   
}