Что такое паттерн Посетитель (Visitor)?

Этот вопрос проверяет знание паттерна Посетитель и его применения для разделения логики и структуры объекта.

Короткий ответ

Паттерн Посетитель позволяет добавлять новые операции к объектам без изменения их классов. Это достигается через внешний класс "посетитель", который реализует логику, применимую к объектам разных типов.

Длинный ответ

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

 

Пример из реальной жизни:
Представьте музей, где гид (посетитель) проходит через разные залы (объекты) и рассказывает про экспонаты. Каждый зал остаётся неизменным, но гид адаптирует свой рассказ для каждого зала.

 

Реализация в Python:

class Visitor:
    def visit_circle(self, circle):
        print(f"Вычисление площади круга с радиусом {circle.radius}")

    def visit_rectangle(self, rectangle):
        print(f"Вычисление площади прямоугольника {rectangle.width}x{rectangle.height}")

class Shape:
    def accept(self, visitor):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def accept(self, visitor):
        visitor.visit_circle(self)

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def accept(self, visitor):
        visitor.visit_rectangle(self)

visitor = Visitor()
circle = Circle(10)
rectangle = Rectangle(5, 10)

circle.accept(visitor)
rectangle.accept(visitor)

 

Когда использовать:

- Если часто нужно добавлять новые операции к объектам.

- Когда изменение классов объектов нежелательно (например, сторонний код).

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • Python

Ключевые слова

Подпишись на Python Developer в телеграм