File tree Expand file tree Collapse file tree 4 files changed +66
-39
lines changed
Design-Patterns.playground/Pages/Behavioral.xcplaygroundpage Expand file tree Collapse file tree 4 files changed +66
-39
lines changed Original file line number Diff line number Diff line change @@ -311,41 +311,50 @@ The mediator pattern is used to reduce coupling between classes that communicate
311311
312312### Example
313313*/
314- struct Programmer {
314+ protocol Receiver {
315+ associatedtype MessageType
316+ func receive( message: MessageType )
317+ }
315318
316- let name : String
319+ protocol Sender {
320+ associatedtype MessageType
321+ associatedtype ReceiverType : Receiver
322+
323+ var recipients : [ ReceiverType ] { get }
324+
325+ func send( message: MessageType )
326+ }
317327
328+ struct Programmer : Receiver {
329+ let name : String
330+
318331 init ( name: String ) {
319332 self . name = name
320333 }
321-
334+
322335 func receive( message: String ) {
323336 print ( " \( name) received: \( message) " )
324337 }
325338}
326339
327- protocol MessageSending {
328- func send( message: String )
329- }
330-
331- final class MessageMediator : MessageSending {
332-
333- private var recipients : [ Programmer ] = [ ]
334-
340+ final class MessageMediator : Sender {
341+ internal var recipients : [ Programmer ] = [ ]
342+
335343 func add( recipient: Programmer ) {
336344 recipients. append ( recipient)
337345 }
338-
346+
339347 func send( message: String ) {
340348 for recipient in recipients {
341349 recipient. receive ( message: message)
342350 }
343351 }
344352}
353+
345354/*:
346355### Usage
347356*/
348- func spamMonster( message: String , worker: MessageSending ) {
357+ func spamMonster( message: String , worker: MessageMediator ) {
349358 worker. send ( message: message)
350359}
351360
Original file line number Diff line number Diff line change @@ -365,44 +365,53 @@ The mediator pattern is used to reduce coupling between classes that communicate
365365
366366``` swift
367367
368- struct Programmer {
368+ protocol Receiver {
369+ associatedtype MessageType
370+ func receive (message : MessageType)
371+ }
369372
370- let name: String
373+ protocol Sender {
374+ associatedtype MessageType
375+ associatedtype ReceiverType : Receiver
376+
377+ var recipients: [ReceiverType] { get }
378+
379+ func send (message : MessageType)
380+ }
371381
382+ struct Programmer : Receiver {
383+ let name: String
384+
372385 init (name : String ) {
373386 self .name = name
374387 }
375-
388+
376389 func receive (message : String ) {
377390 print (" \( name ) received: \( message ) " )
378391 }
379392}
380393
381- protocol MessageSending {
382- func send (message : String )
383- }
384-
385- final class MessageMediator : MessageSending {
386-
387- private var recipients: [Programmer] = []
388-
394+ final class MessageMediator : Sender {
395+ internal var recipients: [Programmer] = []
396+
389397 func add (recipient : Programmer) {
390398 recipients.append (recipient)
391399 }
392-
400+
393401 func send (message : String ) {
394402 for recipient in recipients {
395403 recipient.receive (message : message)
396404 }
397405 }
398406}
407+
399408```
400409
401410### Usage
402411
403412``` swift
404413
405- func spamMonster (message : String , worker : MessageSending ) {
414+ func spamMonster (message : String , worker : MessageMediator ) {
406415 worker.send (message : message)
407416}
408417
Original file line number Diff line number Diff line change @@ -6,41 +6,50 @@ The mediator pattern is used to reduce coupling between classes that communicate
66
77### Example
88*/
9- struct Programmer {
9+ protocol Receiver {
10+ associatedtype MessageType
11+ func receive( message: MessageType )
12+ }
1013
11- let name : String
14+ protocol Sender {
15+ associatedtype MessageType
16+ associatedtype ReceiverType : Receiver
17+
18+ var recipients : [ ReceiverType ] { get }
19+
20+ func send( message: MessageType )
21+ }
1222
23+ struct Programmer : Receiver {
24+ let name : String
25+
1326 init ( name: String ) {
1427 self . name = name
1528 }
16-
29+
1730 func receive( message: String ) {
1831 print ( " \( name) received: \( message) " )
1932 }
2033}
2134
22- protocol MessageSending {
23- func send( message: String )
24- }
25-
26- final class MessageMediator : MessageSending {
27-
28- private var recipients : [ Programmer ] = [ ]
29-
35+ final class MessageMediator : Sender {
36+ internal var recipients : [ Programmer ] = [ ]
37+
3038 func add( recipient: Programmer ) {
3139 recipients. append ( recipient)
3240 }
33-
41+
3442 func send( message: String ) {
3543 for recipient in recipients {
3644 recipient. receive ( message: message)
3745 }
3846 }
3947}
48+
4049/*:
4150### Usage
4251*/
43- func spamMonster( message: String , worker: MessageSending ) {
52+ func spamMonster( message: String , worker: MessageMediator ) {
4453 worker. send ( message: message)
4554}
4655
You can’t perform that action at this time.
0 commit comments