Что такое паттерн проектирования
Паттерн проектирования — это именованное, проверенное решение задачи, которая снова и снова возникает при проектировании программ. Паттерны — это не код, который вы копируете; это формы, которые вы узнаёте: «здесь задача об обёртке», «здесь задача об оповещении».
Классический каталог содержит 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.
У каждого паттерна из этой группы есть своя страница: что это такое, один запускаемый пример, когда его применять, а также плюсы и минусы.
Паттерны по-типскриптовски
Каталог писался для языков, построенных вокруг классов и интерфейсов, а в TypeScript есть и то, и другое — поэтому большинство паттернов здесь выглядят почти в точности так, как их описывает каталог: interface для роли и один или несколько class ... implements для исполнителей.
Две особенности TypeScript меняют ощущение. Его интерфейсы структурные — значение подходит интерфейсу, если у него правильная форма, поэтому небольшие интерфейсы обходятся дёшево. А функции — обычные значения, поэтому некоторые паттерны сжимаются почти до нуля: стратегией может быть просто функция, которую вы передаёте. На каждой странице об этом сказано честно.
Одно предупреждение перед началом: паттерны — это инструменты, а не цели. Применение паттерна там, где хватило бы обычной функции, делает код хуже. Берите паттерн тогда, когда почувствуете его задачу, — и никогда раньше.