中介者模式
模式定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
模式结构:
- Mediator: 抽象中介者,定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信,一般包括一个或几个抽象的事件方法,并由子类去实现。
- ConcreteMediator: 具体中介者,从抽象中介者继承而来,实现抽象中介者中定义的事件方法
- Colleague: 抽象同事类
- ConcreteColleague: 具体同事类
实例:聊天室,聊天成员
感觉有点拗口的地方,需要聊天室加入所有成员,成员也需要传入聊天室实例。
from abc import ABCMeta, abstractmethod
class Mediator(metaclass=ABCMeta):
"""
抽象中介
聊天室
"""
def __init__(self):
self._members = []
def register_member(self,member):
self._members.append(member)
@abstractmethod
def operation(self,name,msg):
"""具体操作"""
class ChatRoom(Mediator):
"""
具体中介
聊天室
"""
def operation(self,name,msg):
for i in self._members:
i.get_msg(name,msg)
class Colleague(metaclass=ABCMeta):
"""
抽象同事
聊天同事
"""
def __init__(self,name):
self._name = name
self._mediator = None
def set_mediator(self,mediatorObj):
self._mediator = mediatorObj
@abstractmethod
def send_msg(self,msg):
""""""
@abstractmethod
def get_msg(self,name,msg):
""""""
class ChatMember(Colleague):
"""
具体同事
聊天成员
"""
def send_msg(self,msg):
""""""
self._mediator.operation(self._name,msg)
def get_msg(self,name,msg):
""""""
print("%s收到chatroom[%s]的message[%s]"%(self._name,name,msg))
if __name__ == "__main__":
chatroom = ChatRoom()
memb1 = ChatMember("Bob")
memb2 = ChatMember("John")
chatroom.register_member(memb1)
chatroom.register_member(memb2)
memb1.set_mediator(chatroom)
memb2.set_mediator(chatroom)
memb1.send_msg("hello world")

浙公网安备 33010602011771号