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