Паттерн Посредник (Mediator) в Python

Посредник (Mediator) — паттерн поведения объектов. Определяет объект, инкапсулирующий способ взаимодействия множества объектов.Посредник обеспечивает слабую связанность системы, избавляя объекты от необходимости явно ссылаться друг на друга и позволяя тем самым независимо изменять взаимодействия между ними.

class BaseWindow:

    def show(self):
        raise NotImplementedError

    def hide(self):
        raise NotImplementedError


class MainWindow(BaseWindow):

    def show(self):
        print("Show main window")

    def hide(self):
        print("Hide main window")


class HelpWindow(BaseWindow):

    def show(self):
        print("Show help window")

    def hide(self):
        print("Hide help window")


class AboutWindow(BaseWindow):

    def show(self):
        print("Show about window")

    def hide(self):
        print("Hide about window")


class WindowMediator:

    def __init__(self):
        self.windows = dict.fromkeys(["main", "help", "about"])

    def set_main(self, window):
        self.windows['main'] = window

    def set_help(self, window):
        self.windows['help'] = window

    def set_about(self, window):
        self.windows['about'] = window

    def show(self, window):
        for win in self.windows.values():
            if not win is window:
                win.hide()
        window.show()


main_window = MainWindow()
help_window = HelpWindow()
about_window = AboutWindow()

mediator = WindowMediator()

mediator.set_main(main_window)
mediator.set_help(help_window)
mediator.set_about(about_window)

main_window.show()

mediator.show(help_window)

mediator.show(about_window)

После запуска получим следующий вывод:

Show main window
Hide main window
Hide about window
Show help window
Hide main window
Hide help window
Show about window

 

Ссылка на основную публикацию