DEV Community

Sergey Leschev
Sergey Leschev

Posted on โ€ข Edited on

3 3 1 1 1

๐Ÿ’ Mediator Pattern

Mediator Pattern


The mediator pattern is used to reduce coupling between classes that communicate with each other. Instead of classes communicating directly, and thus requiring knowledge of their implementation, the classes send messages via a mediator object.

Github https://github.com/sergeyleschev/design-patterns

Example

protocol Receiver {
    associatedtype MessageType
    func receive(message: MessageType)
}

protocol Sender {
    associatedtype MessageType
    associatedtype ReceiverType: Receiver

    var recipients: [ReceiverType] { get }

    func send(message: MessageType)
}

struct Programmer: Receiver {
    let name: String

    init(name: String) {
        self.name = name
    }

    func receive(message: String) {
        print("\(name) received: \(message)")
    }
}

final class MessageMediator: Sender {
    internal var recipients: [Programmer] = []

    func add(recipient: Programmer) {
        recipients.append(recipient)
    }

    func send(message: String) {
        for recipient in recipients {
            recipient.receive(message: message)
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Usage

func spamMonster(message: String, worker: MessageMediator) {
    worker.send(message: message)
}

let messagesMediator = MessageMediator()

let user0 = Programmer(name: "Linus Torvalds")
let user1 = Programmer(name: "Avadis 'Avie' Tevanian")
messagesMediator.add(recipient: user0)
messagesMediator.add(recipient: user1)

spamMonster(message: "I'd Like to Add you to My Professional Network", worker: messagesMediator)
Enter fullscreen mode Exit fullscreen mode

Sources: Github

Behavioral
In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.
Source: wikipedia.org


๐Ÿ Chain Of Responsibility
๐Ÿ‘ซ Command Pattern
๐ŸŽถ Interpreter Pattern
๐Ÿซ Iterator Pattern
๐Ÿ’ Mediator Pattern
๐Ÿ’พ Memento Pattern
๐Ÿ‘“ Observer Pattern
๐Ÿ‰ State Pattern
๐Ÿ’ก Strategy Pattern
๐Ÿ“ Template Method
๐Ÿƒ Visitor Pattern
๐ŸŒฐ Abstract Factory
๐Ÿ‘ท Builder Pattern
๐Ÿญ Factory Method
๐Ÿ”‚ Monostate Pattern
๐Ÿƒ Prototype Pattern
๐Ÿ’ Singleton
๐Ÿ”Œ Adapter Pattern
๐ŸŒ‰ Bridge Pattern
๐ŸŒฟ Composite Pattern
๐Ÿง Decorator Pattern
๐ŸŽ Facade Pattern
๐Ÿƒ Flyweight Pattern
โ˜” Protection Proxy
๐Ÿฌ Virtual Proxy


Contacts
I have a clear focus on time-to-market and don't prioritize technical debt. And I took part in the Pre-Sale/RFX activity as a System Architect, assessment efforts for Mobile (iOS-Swift, Android-Kotlin), Frontend (React-TypeScript) and Backend (NodeJS-.NET-PHP-Kafka-SQL-NoSQL). And I also formed the work of Pre-Sale as a CTO from Opportunity to Proposal via knowledge transfer to Successful Delivery.

๐Ÿ›ฉ๏ธ #startups #management #cto #swift #typescript #database
๐Ÿ“ง Email: sergey.leschev@gmail.com
๐Ÿ‘‹ LinkedIn: https://linkedin.com/in/sergeyleschev/
๐Ÿ‘‹ LeetCode: https://leetcode.com/sergeyleschev/
๐Ÿ‘‹ Twitter: https://twitter.com/sergeyleschev
๐Ÿ‘‹ Github: https://github.com/sergeyleschev
๐ŸŒŽ Website: https://sergeyleschev.github.io
๐ŸŒŽ Reddit: https://reddit.com/user/sergeyleschev
๐ŸŒŽ Quora: https://quora.com/sergey-leschev
๐ŸŒŽ Medium: https://medium.com/@sergeyleschev
๐Ÿ–จ๏ธ PDF Design Patterns: Download

Top comments (0)

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay