📜  中介者方法Python设计模式

📅  最后修改于: 2022-05-13 01:54:45.005000             🧑  作者: Mango

中介者方法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 图:

中介者方法-UML图

中介者方法-UML图

好处

  • 单一职责原则:Mediator Method下,可以将各个组件之间的通信提取到一个更易于维护的地方。
  • 开放/封闭原则:在不干扰现有客户端代码的情况下,很容易引入新的中介。
  • 允许继承:我们可以重用中介的各个组件,因为它遵循继承
  • 少数子类:中介者限制了子类,因为中介者将否则会在几个对象之间受到干扰的行为本地化。

缺点

  • 集中化:它完全集中了控制,因为中介者模式以交互的复杂性换取中介者的复杂性。
  • God Object: Mediator可以转换为God Object (知道太多或做太多的对象)。
  • 增加的复杂性:如果我们在其中放入过多的逻辑,中介对象的结构可能会变得过于复杂。

适用性

  • 减少子类的数量:当你意识到自己创建了很多不必要的子类时,那么最好使用Mediator方法来避免这些不必要的子类。
  • 空中交通管制员:空中交通管制员是调解员模式的一个很好的例子,其中机场控制室充当不同航班之间通信的调解员。

进一步阅读 – Java中的中介方法