中介者方法Python设计模式
中介者方法是一种行为设计模式,它允许我们减少对象之间的无序依赖关系。在中介环境中,对象借助中介对象相互通信。它通过减少通信对象之间的依赖关系来减少耦合。中介作为对象之间的路由器工作,它可以有自己的逻辑来提供一种通信方式。
设计组件:
- 中介者:它定义了同事对象之间通信的接口。
- 具体中介者:实现中介者接口,协调同事对象之间的通信。
- 同事:它定义了与其他同事通信的接口
- 具体的同事:它实现了同事接口,并通过它的中介与其他同事进行通信。
不使用中介方法的问题
想象一下,您将参加GeeksforGeeks提供的其中一门精英课程,例如DSA、SDE 、 和STL 。最初,很少有学生愿意参加这些课程。最初,开发人员可以为学生和课程之间的连接创建单独的对象和类,但是随着课程在学生中的知名度,开发人员很难处理如此大量的子类及其对象。
使用中介方法的解决方案
现在让我们了解专业开发人员将如何使用Mediator 设计模式来处理这种情况。我们可以创建一个名为Course的单独中介类和一个用户类,使用它我们可以创建 Course 类的不同对象。在 main 方法中,我们将为每个学生创建一个单独的对象,在 User 类中,我们将为 Course 类创建一个对象,这有助于防止无序代码。
Python3
class Course(object):
"""Mediator class."""
def displayCourse(self, user, course_name):
print("[{}'s course ]: {}".format(user, course_name))
class User(object):
'''A class whose instances want to interact with each other.'''
def __init__(self, name):
self.name = name
self.course = Course()
def sendCourse(self, course_name):
self.course.displayCourse(self, course_name)
def __str__(self):
return self.name
"""main method"""
if __name__ == "__main__":
mayank = User('Mayank') # user object
lakshya = User('Lakshya') # user object
krishna = User('Krishna') # user object
mayank.sendCourse("Data Structures and Algorithms")
lakshya.sendCourse("Software Development Engineer")
krishna.sendCourse("Standard Template Library")
UML 图
以下是中介方法的 UML 图:
好处
- 单一职责原则:在Mediator Method下,可以将各个组件之间的通信提取到一个更易于维护的地方。
- 开放/封闭原则:在不干扰现有客户端代码的情况下,很容易引入新的中介。
- 允许继承:我们可以重用中介的各个组件,因为它遵循继承
- 少数子类:中介者限制了子类,因为中介者将否则会在几个对象之间受到干扰的行为本地化。
缺点
- 集中化:它完全集中了控制,因为中介者模式以交互的复杂性换取中介者的复杂性。
- God Object: Mediator可以转换为God Object (知道太多或做太多的对象)。
- 增加的复杂性:如果我们在其中放入过多的逻辑,中介对象的结构可能会变得过于复杂。
适用性
- 减少子类的数量:当你意识到自己创建了很多不必要的子类时,那么最好使用Mediator方法来避免这些不必要的子类。
- 空中交通管制员:空中交通管制员是调解员模式的一个很好的例子,其中机场控制室充当不同航班之间通信的调解员。
进一步阅读 – Java中的中介方法