Observor Design Pattern
观察者设计模式用于通知其他实体其状态的变化。
下面看一个简单的示例:
protocol ScoreObservor {
func scoreUpdate()
}
enum Team: String {
case barcelona, juventus
}
class Player {
var name: String
let team: Team
var goalCount = 0
var scoreObservor: ScoreObservor?
init(name: String, team: Team) {
self.name = name
self.team = team
}
func didScore() {
goalCount += 1
if let scoreObservor = scoreObservor {
scoreObservor.scoreUpdate()
}
}
}
class Game: ScoreObservor {
var players = [Player]()
init(players: [Player]) {
print("game started")
self.players = players
}
func scoreUpdate() {
var barcelonaScore = 0
var juventusScore = 0
for player in players {
switch player.team {
case .barcelona:
barcelonaScore += player.goalCount
case .juventus:
juventusScore += player.goalCount
}
}
print("Barcelona \(barcelonaScore) - Juventus \(juventusScore)")
}
}
let messi = Player(name: "Messi", team: .barcelona)
let ronaldo = Player(name: "Ronaldo", team: .juventus)
let game = Game(players: [messi, ronaldo])
messi.scoreObservor = game
ronaldo.scoreObservor = game
messi.didScore()
ronaldo.didScore()
messi.didScore()
ronaldo.didScore()
messi.didScore()
ronaldo.didScore()
网友评论