Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту. Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы. Создание неизменяемого объекта. Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять. В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого могут применяться атрибуты или аннотации. Позволяет добавлять дополнительные свойства для класса в контейнер (внутри класса), вместо расширения класса новыми свойствами. Расширяет шаблон Publish/Subscribe, создавая централизованный канал для событий. Использует объект-представитель для подписки и объект-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одного объекта, даже если он зарегистрирован только на одном канале. Класс, который представляет собой интерфейс для создания компонентов системы. Класс, который представляет собой интерфейс для создания сложного объекта. Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. Объект, инициализируемый во время первого обращения к нему. Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним. Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов. Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор. Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта. Класс, который может иметь только один экземпляр. Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс. Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. Объект, который объединяет в себе объекты, подобные ему самому. Класс, расширяющий функциональность другого класса без использования наследования. Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое. Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы. Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым. Объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него. Предназначен для организации в системе уровней ответственности. Представляет действие. Объект команды заключает в себе само действие и его параметры. Решает часто встречающуюся, но подверженную изменениям, задачу. Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации. Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга. Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях. Предотвращает нулевые указатели, предоставляя объект «по умолчанию». Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии. Используется для обеспечения общей функциональности группе классов. Служит для связывания бизнес-логики. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы. Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется. Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной). 