Created
March 13, 2019 03:34
-
-
Save richimf/0aa86cf17054aa755ea8898b3af8a6f2 to your computer and use it in GitHub Desktop.
Observer Pattern
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol Observer { | |
func update() | |
} | |
class ConcreteObserver: Observer { | |
var id: String | |
init(id: String) { | |
self.id = id | |
} | |
func update() { | |
print(id + " observered the subject's state was changed.") | |
} | |
} | |
class TextField { | |
var observers: [Observer] = [] | |
var state: String { | |
didSet { | |
notify() | |
} | |
} | |
init(state: String) { | |
self.state = state | |
} | |
func attach(observer: Observer) { | |
observers.append(observer) | |
} | |
func notify() { | |
for observer in observers { | |
observer.update() | |
} | |
} | |
} | |
//usage | |
let textField = TextField(state: "initial state") | |
let observerA = ConcreteObserver(id: "A") | |
let observerB = ConcreteObserver(id: "B") | |
textField.attach(observer: observerA) | |
textField.attach(observer: observerB) | |
textField.state = "new state" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment