Сообщения

Показаны сообщения с ярлыком "Паттерны в Java"

Паттерн делегирования (Delegation) в Java

Изображение
Паттерн делегирования (Delegation) является поведенческим (behavioral) паттерном проектрования. Это техника, в которой объект выражает определенное поведение снаружи, но в реальности делегирует ответственность за реализацию этого поведения связанному объекту. Паттерн делегирования обеспечивает механизм отвлечения от реализации и контроля желаемого действия. Класс, вызываемый для выполнения действия, не выполняет его, а фактически делегирует вспомогательному классу. Потребитель не имеет или не требует знания фактического класса, выполняющего действие, только контейнера, к которому производится вызов. Используйте шаблон делегата для достижения следующего: Уменьшение связанности методов с их классом Работы компонентов, которые ведут себя одинаково, но предполагается, что эта ситуация может измениться в будущем. Пример использования паттерна делегирования на Java Предположим у нас есть автомобиль - интерфейс Car, имеющий метод ride: package example; public interface Car { ...

Паттерн Наблюдатель (Observer) в Java

Изображение
Паттерн Наблюдатель (Observer) относится к поведенческим (behavioral) паттернам проектирования. Основная цель данного паттерна это определение зависимости один-ко-многим между объектами, чтобы при изменении состояния объекта, все зависимые от него объекты получали уведомление и обновлялись автоматически. Используйте паттерн Наблюдатель (Observer) в любой из следующих ситуаций: когда абстракция имеет два аспекта, один зависит от другого. Инкапсуляция этих аспектов в отдельных объектах позволяет варьировать и повторно использовать их независимо. когда изменение одного объекта требует изменения других, и вы не знаете, сколько объектов нужно изменить когда объект должен иметь возможность уведомлять другие объекты, не делая предположений о том, кто эти объекты. Другими словами, вы не хотите, чтобы эти объекты были тесно связаны. Типичный вариант использования: изменение в одном объекте приводит к изменению в других объектах. Пример использования паттерна Наблюдатель на Java Предп...

Паттерн Стратегия (Strategy) в Java

Изображение
Паттерн Стратегия (Strategy) относится к поведенческим (behavioral) паттернам проектирования. Также известен как Политика (Policy). Основным замыслом паттерна является следующая ситуация. Вы определяете семейство алгоритмов, инкапсулируете каждый и делаете их взаимозаменяемыми. Стратегия позволяет алгоритму варьироваться независимо от клиентов, которые используют его. Используйте шаблон стратегии, когда многие связанные классы отличаются только своим поведением. Стратегии предоставляют способ настроить класс на одно из многих поведений вам нужны разные варианты алгоритма. Например, вы можете определить алгоритмы, отражающие различные компромиссы пространства/времени. Стратегии могут использоваться, когда эти варианты реализованы в виде иерархии классов алгоритмов. алгоритм использует данные, о которых клиенты не должны знать. Используйте паттерн Стратегия, чтобы избежать выявления сложных, специфичных для алгоритма структур данных. класс определяет много поведений, и они появля...

Паттерн Декоратор (Decorator) в Java

Изображение
Паттерн Декоратор (Decorator) относится к структурным паттернам проектирования. С его помощью можно прикрепить дополнительные обязанности к объекту динамически. Декораторы предоставляют гибкую альтернативу подклассам для расширения функциональности. Пример из реального мира. Предположим существует автомобиль. Он имеет максимальную скорость, с которой может ездить. Для того чтобы увеличить скорость не обязательно создавать другой автомобиль. Можно просто провети тюнинг (например, заменить колеса на облегченные, убрать из салона сидения пассажиров, поменять мотор как радикальная мера) - и тогда максимальная скорость автомобиля увеличится. Простыми словами паттерн Декоратор позволяет динамически изменять поведение объекта во время выполнения, оборачивая их в объект класса декоратора. В объектно-ориентированном программировании паттерн декоратор является паттерном проектирования, который позволяет добавлять поведение к отдельному объекту, статически или динамически, без влияния на пове...

Паттерн Адаптер (Adapter) в Java

Изображение
Паттерн Адаптер (Adapter) , также известный как Обертка (Wrapper), является структурным (Structural) паттерном проектирования. Его цель преобразовать интерфейс класса в другой интерфейс, который ожидают клиенты. Адаптер позволяет классам работать вместе, что иначе невозможно из-за несовместимых интерфейсов. Примеры из реального мира: Предположим, что на вашей карте памяти есть несколько снимков, и вам необходимо перенести их на компьютер. Для их передачи вам нужен какой-то адаптер, совместимый с портами вашего компьютера, чтобы вы могли подключить карту памяти к вашему компьютеру. В этом случае карт-ридер является адаптером. Другим примером будет известный адаптер питания; вилка с тремя ножками не может быть подключена к розетке с двумя выводами, для этого необходимо использовать адаптер питания, который делает его совместимым с розеткой с двумя выводами. Еще одним примером будет переводчик, переводящий слова, сказанные одним человеком другому. Проще говоря паттерн адаптер позво...

Паттерн Builder (Строитель) в Java

Изображение
Цель паттерна Builder - отделить строительство сложного объекта от его представления, так что один и тот же процесс строительства может создать разные представления. Паттерн Builder позволяет создавать различные варианты объекта, избегая загрязнения конструктора. Полезно, когда может быть несколько вариантов объекта. Или когда есть много шагов, вовлеченных в создание объекта. Согласно Википедии: паттерн Builder - это паттерн проектирования программного обеспечения для создания объектов с намерением найти решение для анти-паттерна телескопического конструктора. Что такое анти-шаблон телескопического конструктора? Рассмотрим на примере: public Car(String name, Brand brand, Color color, Body body, Wheels wheels, Tuning tuning){} Как вы можете видеть, количество параметров конструктора может быстро выйти из-под контроля, и это может стать трудным понять расположение параметров. Плюс этот список параметров может продолжать расти, если вы захотите добавить больше опций в будущем. ...