PATTERNS

Вопросы и ответы для подготовки к собеседованиям

Разделы

Введение

Надо обязательно вспомнить что такое ООП.

Паттерн(шаблон) проектирования (рассматриваем только вариант для программирования) - способ организации программного кода, представляющего собой решение некоторой часто возникающей проблемы проектирования.


Паттерны проектирования:


Основные примеры:

Порождающие(creational) паттерны

Основная цель отделить процесс создания объектов от основной логики.

Фабричный метод (Factory Method)

Абстрактная ф-ка (Abstract Factory)

Одиночка (Singleton)

Строитель (Builder)

Прототип (Prototype)

Фабрика (Factory Method)

Цель:

Создание интерфейса, который создаёт объект. При этом, выбор того, экземпляр какого класса создавать остаётся за классами, которые имплементируют данный интерфейс.

Для чего используется:

Для делигирования создания экземпляров, другому классу.

Пример использования:


Абстрактная фабрика (Abstract Factory)

Цель:

Создание интерфейса, для создания множества взаимосвязанных или взаимозависимых объектов, без жёсткой привязке к конкретным классам.

Для чего используется:

Для создания множеств взаимосвязанных объектов.

Пример использования:


Одиночка (Singleton)

Цель:

Гарантировать, что у класса будет только один единственный экземпляр и к нему будет предоставлена глобальная точка доступа.

Для чего используется:

Для создания единственного экземпляра определённого класса.

Пример использования:


Строитель (Builder)

Цель:

Отделить конструирование сложного объекта от его представления таким образом, чтобы в результате одного и того же конструирования мы могли получить разные представления.

Для чего используется:

Для создания различных объектов из одного набора данных.

Пример использования:


Прототип (Prototype)

Цель:

Определить вид создаваемых объектов с помощью экземпляра - прототипа и создавать новые объекты, копируя этот прототип.

Для чего используется:

Для создания копий заданного объекта.

Пример использования:

Структурные(structural) паттерны

Адаптер (Adapter)

Мост (Bridge)

Компоновщик (Composite)

Декоратор (Decorator)

Фасад (Facade)

Приспособленец (Flyweight)

Заместитель (Proxy)

Адаптер (Adapter)

Цель:

Преобразование интерфейса одного класса в интерфейс того класса, который необходим клиенту.

Для чего используется:

Для обеспечения совместной работы классов, интерфейсы которых не совместимы.

Пример использования:


Мост (Bridge)

Цель:

Отделить абстракцию от её реализации таким образом, чтобы мы могли изменять независимо друг от друга и то и другое.

Для чего используется:

Для получения преимуществ наследования без потери гибкости.

Пример использования:


Компоновщик (Composite)

Цель:

Скомпонировать объекты в структуры по типу "дерева", позволяя клиентам единообразно трактовать отдельные и составные объекты.

Для чего используется:

Для группировки мелких компонентов в более крупные, которые, в свою очередь, могут стать основой для ещё более крупных стуктур.

Пример использования:


Декоратор (Decorator)

Цель:

Динамическое добавление новых обязанностей объекту.

Для чего используется:

Используется в качестве альтернативы порождению подклассов для расширения функциональности.

Пример использования:


Фасад (Facade)

Цель:

Предоставить унифицированный интерфейс вместо нескольких интерфейсов подститсемы.

Для чего используется:

Используется для опредления интерфейса высокого уровня, который упрощает использование подсистемы.

Пример использования:


Приспособленец (Flyweight)

Цель:

Поддержка множества мелких объектов.

Для чего используется:

Использует разделение для того, чтобы поддерживать много мелких объектов.

Пример использования:


Заместитель (Proxy)

Цель:

Для замещения другого объекта и контроля доступа к нему.

Для чего используется:

Для обеспечения контроля досутпа к опредленному объекту.

Пример использования:

Поведенческие(behavioral) паттерны

Итератор (Iterator)

Посредник (Mediator)

Стратегия (Strategy)

Наблюдатель (Observer)

Команда (Command)

Цепочка ответственности (Chain Of Responsibility)

Состояние (State)

Шаблонный метод (Template method)

Посетитель (Visitor)

Интерпретатор (Interpreter)

Хранитель (Memento)

Цепочка ответственности (Chain Of Responsibility)

Цель:

Связывание объектов-получателей в цепочку и передача запроса по ней.

Для чего используется:

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

Пример использования:


Команда (Command)

Цель:

Инкапсулирование запроса в объект.

Для чего используется:

Чтобы задать параметры клиентов для обработки определённых запросов, создание очереди из этих запросов или их контроля и поддержки отмены операций.

Пример использования:


Интерпретатор (Interpreter)

Цель:

Определение представления грамматики объекта.

Для чего используется:

Используется для определения представления грамматики заданного языка и интерпретации его предложений.

Пример использования:


Итератор (Iterator)

Цель:

Получение последовательного доступа ко всем элементам составного объекта.

Для чего используется:

Для получения последовательного доступа ко всем элементам составного объекта, скрывая его внутреннее представление.

Пример использования:


Посредник (Mediator)

Цель:

Инкапсуляция способа взаимодейтсвия множества объектов.

Для чего используется:

Для определения объекта, который инкапсулирует способ взаимодействия множества объектов и обеспечения слабой связи между этими объектами.

Пример использования:


Хранитель (Memento)

Цель:

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

Для чего используется:

Фиксирование внутреннего состояния объекта за его пределами не нарушая инкапсуляцию и восстановления объекта в случае необходимости.

Пример использования:


Наблюдатель (Observer)

Цель:

Определение зависимости "один ко многим" между объектами.

Для чего используется:

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

Пример использования:


Состояние (State)

Цель:

Управление поведением объекта в зависимости от состояния.

Для чего используется:

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

Пример использования:


Стратегия (Strategy)

Цель:

Взаимозаменяемость семейства классов.

Для чего используется:

Определение семейства классов, инкапсулирование каждого из них и организация их взаимозаменяемости.

Пример использования:


Шаблонный метод (Template method)

Цель:

Определение основы класса и создание возможности подклассам переопределять его части.

Для чего используется:

Определяет основу класса и позволяет подклассам переопределять некоторые его части не изменяя его структуру в целом.

Пример использования:


Посетитель (Visitor)

Цель:

Описание действий, которые выполняются с каждым объектом в некоторой структуре.

Для чего используется:

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

Пример использования: