目录

行为型:观察者模式

释义

观察者模式,观察者随着被观察者的变动而变动。

/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%EF%BC%9A%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.resources/A7BBBBB7-C836-45B6-A10B-122B1DE7630E.png
观察者模式

主体类Subject有两个观察者FirstObserverSecondObserver。当Subject更新时,两个观察者会做出相应的更新。

观察者

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
interface Observer {
    fun update()
}

class FirstObserver(
    val subject: Subject
) {
    fun update() {
        // do update
    }
}

class SecondObserver(
    val subject: Subject
) {
    fun update() {
        // do update
    }
}

主体类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Subject(
    val observers: MutableList<Observer> = mutableListOf(),
    val state: Int
) {

    // 添加观察者
    fun addObserver(observer: Observer) {
        this.attach(observer)
    }
    
    // 将观察者绑定到主体
    fun attach(observer: Observer) {
        observers.add(observer)
    }
    
    // 更新Subject内容时,相应的更新观察者
    fun setState(state: Int) {
        this.state = state
        notifyAllObserver()
    }
    
    fun notifyAllObserver() {
        for(observer in observers) {
            observer.update()
        }
    }
}

使用

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

    val fisrtObserver: Observer = FirstObserver()
    val secondObserver: Observer = SecondObserver()
    
    val subject: Subject = Subject(state = 0)
    
    // 绑定观察者
    subject.addObserver(firstObserver)
    subject.addObserver(secondOBserver)
    
    // 主体更新,观察者也会做相应的更新操作
    subject.setState(1)
}