中介者模式和外观模式都是设计模式中的重要概念。中介者模式是一种行为型模式,通过引入一个中介者对象来封装多个对象之间复杂的交互关系,使对象之间不必相互引用,从而减少对象间的耦合。而外观模式则是为了简化客户端对复杂系统的调用,提供一个统一的接口,使得客户端无需关心子系统的内部实现,只需要通过外观对象就能轻松地与系统进行交互 。,,两者的主要区别在于中介者模式是通过引入一个中介者对象来封装多个对象之间复杂的交互关系,而外观模式则是为子系统中的一组接口提供一个一致的界面。中介者模式主要用于降低对象间耦合,通过中介者进行通信;而外观模式则旨在隐藏系统的复杂性,提供简洁的接口 。
在软件开发过程中,我们经常会遇到一些复杂的问题,例如对象之间的交互、数据传递等,为了解决这些问题,我们可以采用一些设计模式,我将为大家介绍一种非常实用的设计模式——中介者模式。
中介者模式是一种行为型设计模式,它通过引入一个中介对象来封装一系列的对象交互,从而使这些对象之间的交互松散耦合,中介者模式主要包括以下几个部分:
1、抽象中介者(Abstract Mediator):定义了中介者的基本操作,包括添加、删除和通知相关对象。
2、具体中介者(Concrete Mediator):实现了抽象中介者中定义的操作,并负责管理一组相关的实体对象。
3、抽象主题(Abstract Subject):定义了主题的行为接口,包括请求和响应方法。
4、具体主题(Concrete Subject):实现了抽象主题中定义的请求和响应方法,并负责与中介者进行交互。
5、抽象合作者(Abstract Collaborator):定义了合作者的基本操作,包括添加、删除和通知相关对象。
6、具体合作者(Concrete Collaborator):实现了抽象合作者中定义的操作,并负责管理一组相关的实体对象。
我将通过一个具体的例子来说明中介者模式的应用场景和使用方法,假设我们正在开发一个在线购物系统,系统中有多个实体对象,如用户、商品、订单等,为了实现这些对象之间的松散耦合,我们可以使用中介者模式。
我们需要创建一个抽象中介者类,用于封装用户、商品和订单之间的交互操作,这个类需要包含添加、删除和通知相关对象的方法,我们需要创建具体的中介者类,实现抽象中介者中定义的方法,并负责管理一组相关的实体对象,我们需要创建抽象主题类和具体主题类,分别实现主题的行为接口和请求/响应方法。
下面是一个简单的代码示例:
from abc import ABC, abstractmethod 抽象中介者 class AbstractMediator(ABC): @abstractmethod def add_colleague(self, colleague): pass @abstractmethod def remove_colleague(self, colleague): pass @abstractmethod def notify_colleagues(self, message): pass 具体中介者 class ConcreteMediator(AbstractMediator): def __init__(self): self.colleagues = [] def add_colleague(self, colleague): self.colleagues.append(colleague) colleague.register_mediator(self) def remove_colleague(self, colleague): self.colleagues.remove(colleague) colleague.unregister_mediator(self) def notify_colleagues(self, message): for colleague in self.colleagues: colleague.receive_message(message) 抽象主题 class AbstractSubject(ABC): @abstractmethod def request(self, mediator): pass @abstractmethod def respond(self, mediator): pass 具体主题A class ConcreteSubjectA(AbstractSubject): def __init__(self, mediator): self.mediator = mediator self.mediator.register_subject(self) def request(self, mediator): mediator.send_message("Request from ConcreteSubjectA") response = self.respond(mediator) return response def respond(self, mediator): return "Response from ConcreteSubjectA" 具体主题B class ConcreteSubjectB(AbstractSubject): def __init__(self, mediator): self.mediator = mediator self.mediator.register_subject(self) def request(self, mediator): mediator.send_message("Request from ConcreteSubjectB") response = self.respond(mediator) return response def respond(self, mediator): return "Response from ConcreteSubjectB"
通过以上代码,我们可以看到中介者模式有效地解决了对象之间的松散耦合问题,当需要修改系统中的某个实体对象时,我们只需要修改对应的具体主题类即可,而不需要修改其他实体对象或中介者类,这样可以降低系统的耦合度,提高代码的可维护性和可扩展性。