Паттерн или шаблон проектирования - это общее типовое решение некоторой проблемы, многократно повторяемое в процессе проектирования архитектуры програмного продукта. Они показывают отношения и взаимодействия между классами, позволяют сделать систему гибкой и легко изменяемой. При правильном их использовании, повышается коэффициент использования готовых решений.
Разберем некоторые из них.
Порождающие.
Singleton (Одиночка) - Используется для создания всего одного экземпляра класса и гарантирует, что во время работы программы не появится второй. Например, в схеме MVC( об этой схеме поговорим очень скоро), зачастую этот паттерн используется для порождения главного контроллера.
Abstract Factory (Абстрактная Фабрика) - Его основное назначение - предоставить интерфейс для создания семейства взаимосвязанных объектов, не специфицируя их классы.
Factory Method (Фабричный Метод) - Используется для определения и поддержания отношений между объектами. Фабричные методы избавляют проектировщика от необходимости встраивать в код зависящие от приложения классы.
Prototype (Прототип) - Используется для задания вида создаваемых объектов на основе объектов прототипа, от которого происходит передача внутреннего состояния. Prototype позволяет избавиться от жесткой привязки к классам и, как следствие вязкости кода.
Builder (Строитель) - Используется для отдаления процесса конструирования сложного объекта от его представления, так что в результате одного и того же конструирования могут получаться различные объекты.
Структурные
Adapter (Адаптер) - Унифицирует классы и объекты. Используется для преобразования одного интерфейса в другой, необходимый клиенту.
Bridge (Мост) - Используется для отделения абстракции от ее реализации так, чтобы то и другое можно было изменять независимо.
Composite (Компоновщик) - Объединяет в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и группам объектов одинаково. Основным назначением паттерна, является обеспечение единого интерфейса как к составному так и к иному объекту, что бы клиент не задумывался над тем, с каким объектом он работает. Общеизвестным примером этого паттерна является jQuery.
Decorator (Декоратор) - Используется для динамического расширения функционального объекта, является гибкой альтернативой наследованию.
Facade (Фасад) - Определяет интерфейс более высокого уровня, который упрощает использование подсистем. Представляет собой унифицированный интерфейс, вместо набора интерфейсов некоторой подсистемы. Разбиение на подсистемы сложной системы, позволяет упростить процесс проектирования, а также позволяет максимально снизить зависимости одной подсистемы от другой. Однако это приводит к тому, что использовать такие подсистемы вместе становится слишком сложно.
Flyweight (Приспособленец) - Он используется для эффективной поддержки множества мелких объектов и позволяет использовать их повторно в различном контексте.
Proxy (Прокси) - Предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы.
О каком паттерне написать более подробно и детально? Поставь лайк и напиши в комментариях.