1
0
Fork 0
design-patterns/python/mediator/main.py

97 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
实例:
汤宝宝一时想不开,当了房产中介。
他负责把房东和租客撮合在一起,帮他们达成租房协议。
"""
from abc import ABC, abstractmethod
# 抽象同事类
class Colleague(ABC):
@abstractmethod
def send(self, event: str) -> None:
pass
@abstractmethod
def receive(self, event: str) -> None:
pass
# 抽象中介者
class Mediator(ABC):
@abstractmethod
def notify(self, sender: Colleague, event: str) -> None:
pass
@abstractmethod
def register(self, colleague: Colleague) -> None:
pass
# 具体同事类:房东
class Landlord(Colleague):
mediator: Mediator
name: str
def __init__(self, mediator: Mediator, name: str) -> None:
self.mediator = mediator
self.name = name
self.mediator.register(self)
def send(self, event: str) -> None:
print(f"房东{self.name}发布信息: {event}")
self.mediator.notify(self, event)
def receive(self, event: str) -> None:
print(f"房东{self.name}收到通知: {event}")
# 具体同事类:租客
class Tenant(Colleague):
mediator: Mediator
name: str
def __init__(self, mediator: Mediator, name: str) -> None:
self.mediator = mediator
self.name = name
self.mediator.register(self)
def send(self, event: str) -> None:
print(f"租客{self.name}发布需求: {event}")
self.mediator.notify(self, event)
def receive(self, event: str) -> None:
print(f"租客{self.name}收到通知: {event}")
# 具体中介者类
class HousingMediator(Mediator):
colleagues: list[Colleague] = []
def register(self, colleague: Colleague) -> None:
if colleague not in self.colleagues:
self.colleagues.append(colleague)
def notify(self, sender: Colleague, event: str) -> None:
for colleague in self.colleagues:
if colleague != sender:
colleague.receive(event)
if __name__ == "__main__":
print("============= 中介者模式 =============")
mediator = HousingMediator()
landlord1 = Landlord(mediator, "张三")
landlord2 = Landlord(mediator, "李四")
tenant1 = Tenant(mediator, "王五")
tenant2 = Tenant(mediator, "赵六")
landlord1.send("张三有一套两室一厅的房子出租月租2000元。")
print("-----")
tenant1.send("王五需要一套三室的房子预算3000元/月。")
print("\n=========== 中介者模式结束 ===========")