.NET Design Patterns (GoF). Visitor (Посетитель)

Паттерн Посетитель (Visitor) позволяет определить операцию для объектов других классов без изменения этих классов.

При использовании паттерна Посетитель определяются две иерархии классов: одна для элементов, для которых надо определить новую операцию, и вторая иерархия для посетителей, описывающих данную операцию.

Рассмотрим на примере. Как известно, нередко для разных категорий вкладчиков банки имеют свои правила: оформления вкладов, выдача кредитов, начисления процентов и т.д. Соответственно классы, описывающие данные объекты, тоже будут разными. Но что важно, как правило, правила обслуживания четко описает весь набор категорий клиентов. Например, есть физические лица, есть юридические, отдельные правила для индивидуальных или частных предпринимателей и т.д. Поэтому структура классов, представляющая клиентов будет относительно фиксированной, то есть не склонной к изменениям.

И допустим, в какой-то момент мы решили добавить в классы клиентов функционал сериализации в html, xml, json и т.д. В этом случае мы могли бы построить следующую структуру классов:

То есть суть паттерна в том, что мы легко можем подменить использование одного класса — другим, третим и т.д. В данном случае может быть использована html и xml сериализация, а также если добавятся новые, то мы просто реализует их от IVisitor и начнем использовать.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.