赞
踩
中介者模式是一种行为设计模式,减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。
降低系统中对象之间的直接通信,将复杂的交互转化为通过中介者进行的间接交互,从而解耦系统各部分,降低其耦合度。
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- __doc__ = """
- 中介者模式
- 例:实现一个简单的聊天室系统,其中中介者对象负责协调用户之间的消息传递
- """
-
- from abc import ABC, abstractmethod
-
-
- class Mediator(ABC):
- """中介者基类"""
-
- @abstractmethod
- def send_message(self, sender, message):
- pass
-
-
- class ChatRoom(Mediator):
- """具体中介者"""
-
- def __init__(self):
- self.users = []
-
- def add_user(self, user):
- self.users.append(user)
-
- def send_message(self, sender, message):
- for user in self.users:
- if user != sender:
- user.receive_message(message)
-
-
- class User(ABC):
- """抽象组件类(用户)"""
-
- def __init__(self, name, mediator):
- self.name = name
- self.mediator = mediator
-
- @abstractmethod
- def send_message(self, message):
- pass
-
- @abstractmethod
- def receive_message(self, message):
- pass
-
-
- class ChatUser(User):
- """具体组件类(用户)"""
-
- def send_message(self, message):
- print(f"{self.name} 发送消息: {message}")
- self.mediator.send_message(self, message)
-
- def receive_message(self, message):
- print(f"{self.name} 收到消息: {message}")
-
-
- if __name__ == "__main__":
- """
- 张三 发送消息: 大家好!
- 李四 收到消息: 大家好!
- ------------------------------
- 李四 发送消息: 你好,张三
- 张三 收到消息: 你好,张三
- """
- chat_room = ChatRoom()
-
- user1 = ChatUser("张三", chat_room)
- user2 = ChatUser("李四", chat_room)
-
- chat_room.add_user(user1)
- chat_room.add_user(user2)
-
- user1.send_message("大家好!")
- print("-" * 30)
- user2.send_message("你好,张三")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。