Перейти к основному содержимому

Что такое паттерн проектирования

Паттерн проектирования — это именованное, проверенное решение задачи, которая снова и снова возникает при проектировании программ. Паттерны — не код, который копируют: это формы, которые вы учитесь узнавать: «здесь задача про обёртывание», «здесь задача про оповещение».

Классический каталог содержит 23 паттерна, собранных четырьмя авторами, известными как Банда четырёх (Gang of Four). Знание этих паттернов даёт вам две вещи: готовые ответы на типовые задачи и общий словарь — фраза «примени здесь адаптер» заменяет целый абзац объяснений.


Три семейства

23 паттерна делятся на три семейства:

Порождающие — как создаются объекты: Singleton, Factory Method, Abstract Factory, Builder, Prototype.

Структурные — как части соединяются друг с другом: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.

Поведенческие — как части взаимодействуют между собой: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.

У каждого паттерна из этой группы есть своя страница: что это такое, один работающий пример, когда его применять, а также его плюсы и минусы.


Паттерны по-гошному

Каталог писался для языков, построенных вокруг классов и наследования. В Go нет ни того, ни другого — в нём есть интерфейсы, композиция и функции, и все страницы здесь опираются именно на них.

Некоторые паттерны в Go становятся гораздо проще (стратегия — это просто значение-функция), а несколько почти не нужны вовсе. На каждой странице об этом сказано честно.

Одно предупреждение перед началом: паттерны — это инструменты, а не цель. Если применить паттерн там, где хватило бы обычной функции, код станет хуже. Берите паттерн тогда, когда почувствовали его задачу, — и не раньше.