一、Python中介者模式介绍
二、中介者模式使用
工作原理:
示例:实现播放器功能
三、附录
不同class之间的方法通过实例化对象来互相调用
Python中介者模式是一种行为型设计模式,它允许多个对象之间进行通信而不必直接相互引用。在这种模式中,一个中介者对象控制多个对象之间的通信,从而减少对象之间的耦合度。
功能:
优点:
缺点:
应用场景:
使用方式:
在应用程序开发中的应用:
举例说明Python中介者模式:
假设我们要开发一个简单的多媒体播放器,其中有三个按钮:播放、停止、暂停,以及一个文本框用于显示当前状态。每个按钮和文本框都是一个对象,三个按钮之间需要相互通信。如果每个按钮都直接和其他按钮通信,代码会变得非常复杂,而且难以维护。这时候可以使用中介者模式来降低对象之间的耦合度,并提高系统的可维护性。
工作原理:
以下是示例Python代码实现:
# 创建中介者类, 播放器
class Mediator():
def __init__(self):
self.play_button = None # 播放
self.stop_button = None # 停止
self.pause_button = None# 暂停
self.text_box = None # 文本框:显示当前状态
def set_play_button(self, play_button):
self.play_button = play_button
def set_stop_button(self, stop_button):
self.stop_button = stop_button
def set_pause_button(self, pause_button):
self.pause_button = pause_button
def set_text_box(self, text_box):
self.text_box = text_box
def play(self):
self.text_box.set_text("Playing...")
def stop(self):
self.text_box.set_text("Stoppped.")
def pause(self):
self.text_box.set_text("Paused.")
# 创建抽象对象类
class Buttton():
def __init__(self, mediator):
self.mediator = mediator
def click(self):
pass
class TextBox():
def __init__(self, mediator):
self.text = ""
self.mediator = mediator
def set_text(self, text):
self.text = text
print(self.text)
# 定义具体对象类
class PlayButton(Buttton):
def click(self):
self.mediator.play()
class StopButton(Buttton):
def click(self):
self.mediator.stop()
class PauseButton(Buttton):
def click(self):
self.mediator.pause()
# 创建对象
mediator = Mediator()
play_button = PlayButton(mediator)
stop_button = StopButton(mediator)
pause_button = PauseButton(mediator)
text_box = TextBox(mediator)
mediator.set_play_button(play_button)
mediator.set_stop_button(stop_button)
mediator.set_pause_button(pause_button)
mediator.set_text_box(text_box)
play_button.click()
pause_button.click()
stop_button.click()
运行结果:
Playing...
Paused.
Stoppped.
在上述代码中,我们创建了一个中介者类Mediator,抽象对象类Button和TextBox,以及具体对象类PlayButton、StopButton和PauseButton。其中,抽象对象类Button和TextBox都包含一个指向中介者对象的成员变量mediator,具体对象类PlayButton、StopButton和PauseButton实现了抽象对象类Button的click方法,并在其中调用中介者对象的play、pause和stop方法。在中介者类Mediator中,我们定义了三个方法play、stop和pause,并在其中设置了文本框的内容。
在测试代码中,我们创建了按钮和文本框对象,并将它们设置到中介者对象中。然后通过调用按钮对象的click方法来模拟用户点击按钮的行为,从而触发各个对象之间的通信。最终,我们可以看到文本框上输出了正确的状态信息,证明各个对象之间的通信已经成功完成。
使用方法:
class A():
def method_a(self):
print("method_a")
b = B()
b.method_b()
class B():
def method_b(self):
print("method_b")
a = A()
a.method_a() # 输出 method_a 和 method_b