-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathContents.swift
72 lines (56 loc) · 1.5 KB
/
Contents.swift
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//: Playground - noun: a place where people can play
// Powered by https://maimieng.com from https://github.com/kingcos/Swift-X-Design-Patterns
import UIKit
// 国家协议
protocol Country {
var mediator: UnitedNations { get }
}
// 联合国协议
protocol UnitedNations {
func declare(_ message: String, _ colleague: Country)
}
// A 国
class CountryA: Country {
var mediator: UnitedNations
init(_ mediator: UnitedNations) {
self.mediator = mediator
}
func declare(_ message: String) {
mediator.declare(message, self)
}
func getMessage(_ message: String) {
print("A 国获得消息:\(message)")
}
}
// B 国
class CountryB: Country {
var mediator: UnitedNations
init(_ mediator: UnitedNations) {
self.mediator = mediator
}
func declare(_ message: String) {
mediator.declare(message, self)
}
func getMessage(_ message: String) {
print("B 国获得消息:\(message)")
}
}
// 联合国安理会
class UnitedNationsSecurityCouncil: UnitedNations {
var cA: CountryA?
var cB: CountryB?
func declare(_ message: String, _ colleague: Country) {
if type(of: colleague) == type(of: cA!) {
cB!.getMessage(message)
} else {
cA!.getMessage(message)
}
}
}
var unsc = UnitedNationsSecurityCouncil()
let cA = CountryA(unsc)
let cB = CountryB(unsc)
unsc.cA = cA
unsc.cB = cB
cA.declare("Message A")
cB.declare("Message B")