banner
Jul 23, 2023
87 Views

Mediator pattern

Written by
banner

In software engineering, the mediator pattern defines an object that encapsulates how a set of objects interact. This pattern is considered to be a behavioral pattern due to the way it can alter the program's running behavior.


Trong kỹ thuật phần mềm, mẫu trung gian (Mediator pattern) xác định một đối tượng bao bọc cách mà một tập hợp các đối tượng tương tác với nhau, nó giúp tăng tính linh hoạt khi giao tiếp giữa các object bằng cách tập trung kết nối giữa chúng bằng 1 mediator object . Mẫu này được coi là một mẫu hành vi do cách nó có thể thay đổi hành vi chạy của chương trình.

Ví dụ: Bạn code 1 ứng dụng chat nơi mà người dùng có thể gửi tin nhắn cho nhau, mediator class sẽ được dùng để xử lý các mesage được gửi nhận từ người dùng:

class User:
    def __init__(self, name, mediator):
        self.name = name
        self.mediator = mediator

    def send_message(self, message, recipient):
        self.mediator.send_message(message, self, recipient)

    def receive_message(self, message, sender):
        print(f"{self.name} received a message from {sender.name}: {message}")


class ChatMediator:
    def __init__(self):
        self.users = []

    def add_user(self, user):
        self.users.append(user)

    def send_message(self, message, sender, recipient):
        if sender in self.users and recipient in self.users:
            recipient.receive_message(message, sender)


if __name__ == "__main__":
    mediator = ChatMediator()

    john = User("John", mediator)
    jane = User("Jane", mediator)
    alice = User("Alice", mediator)

    mediator.add_user(john)
    mediator.add_user(jane)
    mediator.add_user(alice)

    john.send_message("Hi everyone!", alice)
    jane.send_message("Hello, John!", john)
    alice.send_message("Nice to meet you all!", jane)

''' OUTPUT
Alice received a message from John: Hi everyone!
John received a message from Jane: Hello, John!
Jane received a message from Alice: Nice to meet you all!
'''
Article Tags:
· · · ·
Article Categories:
dev
banner

Leave a Reply

Your email address will not be published. Required fields are marked *