97 lines
2.5 KiB
Python
97 lines
2.5 KiB
Python
"""
|
||
实例:
|
||
汤宝宝一时想不开,当了房产中介。
|
||
他负责把房东和租客撮合在一起,帮他们达成租房协议。
|
||
"""
|
||
|
||
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=========== 中介者模式结束 ===========")
|