Шаблон делегирования

Шаблон делегирования (Delegation Pattern) – это поведенческий шаблон проектирования, который позволяет объекту передавать выполнение определенных задач другому объекту (делегату) вместо того, чтобы выполнять их самому. Этот шаблон применяется, когда объект должен выполнять различные действия в зависимости от определенных условий или когда он хочет разделить функциональность между различными объектами.

Основные участники шаблона делегирования:

  1. Исходный объект (Delegator): Это объект, который делегирует выполнение определенных задач другому объекту. Исходный объект не обязательно знает о всех деталях реализации делегата.
  2. Делегат (Delegate): Это объект, который фактически выполняет задачи, делегированные исходным объектом. Делегат обязан реализовывать интерфейс или методы, необходимые для выполнения этих задач.

Пример использования шаблона делегирования на языке Python:

python

class Worker: def __init__(self, name): self.name = name def do_work(self): pass class Manager: def __init__(self, worker): self.worker = worker def manage(self): print(f"Менеджер {self.name} делегирует задачу сотруднику {self.worker.name}") self.worker.do_work() class Engineer(Worker): def do_work(self): print(f"{self.name} выполняет инженерные задачи") class Designer(Worker): def do_work(self): print(f"{self.name} создает дизайн") engineer = Engineer("Иван") designer = Designer("Мария") manager1 = Manager(engineer) manager2 = Manager(designer) manager1.manage() # Вывод: Менеджер делегирует задачу сотруднику Иван manager2.manage() # Вывод: Менеджер делегирует задачу сотруднику Мария

В этом примере классы Engineer и Designer выполняют конкретные задачи, а класс Manager делегирует задачи соответствующим сотрудникам, используя шаблон делегирования.

Шаблон делегирования полезен, когда нужно обеспечить гибкость и расширяемость кода, разделяя его на более мелкие и отдельные компоненты. Это также помогает соблюдать принцип единственной ответственности (Single Responsibility Principle, SRP) и избегать чрезмерной сложности в классах.