JavaRush /Курсы /Java Collections /Учимся гуглить | 7 уровень | 11 лекция

Учимся гуглить | 7 уровень | 11 лекция

Java Collections
7 уровень , 11 лекция
Открыта

— Привет, Амиго!

Продолжаем наши уроки – учимся гуглить.

Вот тебе несколько заданий:

Надо найти в Google
1 Паттерны проектирования
2 Паттерн Singleton
3 Реализация паттерна Singleton в Java
4 Что такое UML
5 UML примеры
6 Паттерн Factory и AbstractFactory
7 Паттерн Proxy
8 Паттерн Bridge
9 Паттерн Adapter
10 Антипаттерны
Комментарии (22)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
oleh ronin Уровень 47
14 марта 2024
1). Есть три типа паттернов: 1. Порождающие паттерны 2. Структурные паттерны 3. Поведенческие паттерны 1. Порождающие паттерны Эти паттерны относятся к процессу создания объектов. Они обеспечивают гибкость и повторное использование кода при создании объектов. Вот некоторые из них: Singleton🏠: Обеспечивает создание только одного экземпляра класса и предоставление глобальной точки доступа к этому экземпляру Фабричный метод🔧: Определяет интерфейс для создания объектов, позволяя подклассам выбирать, какой класс инстанциировать Абстрактная фабрика🏭: Предоставляет интерфейс для создания семейств взаимосвязанных объектов без указания их конкретных классов Прототип📄: Позволяет создавать новые объекты путем копирования существующих объектов, вместо создания новых объектов с нуля 2. Структурные паттерны Структурные паттерны определяют отношения между классами и объектами, создавая более сложные структуры. Вот некоторые из них: Адаптер🔌: Позволяет объектам с несовместимыми интерфейсами работать вместе Мост🌉: Разделяет абстракцию и реализацию, так что они могут развиваться независимо друг от друга Компоновщик🌳: Объединяет объекты в древовидные структуры для представления иерархии частей-целого Декоратор🎨: Добавляет новые функции к существующему объекту без изменения его структуры 3. Поведенческие паттерны Поведенческие паттерны определяют обязанности и взаимодействие между объектами. Вот некоторые из них: Цепочка обязанностей ⛓️: Позволяет передавать запросы по цепочке обработчиков, пока один из них не обработает запрос Команда🎮: Инкапсулирует запрос в виде объекта, что позволяет парам-ровать клиентов с различными запросами Итератор🔄: Предоставляет способ последовательного доступа к элементам объекта-агрегата без раскрытия его внутренней структуры Наблюдатель👀: Определяет отношение «один-ко-многим» между объектами, так что при изменении состояния одного объекта автоматически уведомляются все зависимые объекты
oleh ronin Уровень 47
14 марта 2024
2). Одиночка — это порождающий паттерн, который гарантирует существование только одного объекта определённого класса, а также позволяет достучаться до этого объекта из любого места программы. Одиночка имеет такие же преимущества и недостатки, что и глобальные переменные. Его невероятно удобно использовать, но он нарушает модульность вашего кода. Вы не сможете просто взять и использовать класс, зависящий от одиночки в другой программе. Для этого придётся эмулировать присутствие одиночки и там. Чаще всего эта проблема проявляется при написании юнит-тестов. Проблема Одиночка решает сразу две проблемы, нарушая принцип единственной ответственности класса. 1. Гарантирует наличие единственного экземпляра класса. Чаще всего это полезно для доступа к какому-то общему ресурсу, например, базе данных. Представьте, что вы создали объект, а через некоторое время пробуете создать ещё один. В этом случае хотелось бы получить старый объект, вместо создания нового. Такое поведение невозможно реализовать с помощью обычного конструктора, так как конструктор класса всегда возвращает новый объект. Глобальный доступ к одному объекту Клиенты могут не подозревать, что работают с одним и тем же объектом. 2. Предоставляет глобальную точку доступа. Это не просто глобальная переменная, через которую можно достучаться к определённому объекту. Глобальные переменные не защищены от записи, поэтому любой код может подменять их значения без вашего ведома. Но есть и другой нюанс. Неплохо бы хранить в одном месте и код, который решает проблему №1, а также иметь к нему простой и доступный интерфейс. Источник
oleh ronin Уровень 47
14 марта 2024
3). Шаги реализации: Вариант первый – самый простой, который приходит в голову сразу после понимания проблемы. У этого решения есть единственный недостаток – оно не работает в многопоточной среде и поэтому не подходит в большинстве случаев. Решение подходит исключительно для однопоточных приложений. Вариант второй: И вы будете правы, так как проблему многопоточности мы решили, но потеряли две важные вещи: 1. Ленивую инициализацию (Объект instance будет создан classloader-ом во время инициализации класса) 2. Отсутствует возможность обработки исключительных ситуаций(exceptions) во время вызова конструктора. Решение подходит для многопоточных приложений, при условии отсутствия опасности возникновения исключительных ситуаций в конструкторе и отсутствии необходимости ленивой инициализации. Источник
oleh ronin Уровень 47
14 марта 2024
4). Что такое UML-диаграммы? Unified Modeling Language (UML) — унифицированный язык моделирования. Расшифруем: modeling подразумевает создание модели, описывающей объект. Unified (универсальный, единый) — подходит для широкого класса проектируемых программных систем, различных областей приложений, типов организаций, уровней компетентности, размеров проектов. UML описывает объект в едином заданном синтаксисе, поэтому где бы вы не нарисовали диаграмму, ее правила будут понятны для всех, кто знаком с этим графическим языком — даже в другой стране. Для чего используется UML? Одна из задач UML — служить средством коммуникации внутри команды и при общении с заказчиком. Давайте рассмотрим возможные варианты использования диаграмм. Источник
oleh ronin Уровень 47
14 марта 2024
5). Они бывают разные: И как они выглядят привычнее для разработчика:
oleh ronin Уровень 47
14 марта 2024
6). Factory (Фабричный метод) — это порождающий паттерн проектирования, который решает проблему создания различных продуктов, без указания конкретных классов продуктов. Фабричный метод задаёт метод, который следует использовать вместо вызова оператора new для создания объектов-продуктов. Подклассы могут переопределить этот метод, чтобы изменять тип создаваемых продуктов. Сложность: 1/3 Популярность: 3/3 Применимость: Паттерн можно часто встретить в любом Java-коде, где требуется гибкость при создании продуктов. Источник AbstractFactory (Абстрактная фабрика) — это порождающий паттерн проектирования, который решает проблему создания целых семейств связанных продуктов, без указания конкретных классов продуктов. Абстрактная фабрика задаёт интерфейс создания всех доступных типов продуктов, а каждая конкретная реализация фабрики порождает продукты одной из вариаций. Клиентский код вызывает методы фабрики для получения продуктов, вместо самостоятельного создания с помощью оператора new. При этом фабрика сама следит за тем, чтобы создать продукт нужной вариации. Сложность: 2/3 Популярность: 3/3 Применимость: Паттерн можно часто встретить в Java-коде, особенно там, где требуется создание семейств продуктов (например, внутри фреймворков). Источник
oleh ronin Уровень 47
14 марта 2024
7). Proxy (Заместитель) — это объект, который выступает прослойкой между клиентом и реальным сервисным объектом. Заместитель получает вызовы от клиента, выполняет свою функцию (контроль доступа, кеширование, изменение запроса и прочее), а затем передаёт вызов сервисному объекту. Заместитель имеет тот же интерфейс, что и реальный объект, поэтому для клиента нет разницы — работать через заместителя или напрямую. Сложность: 2/3 Популярность: 1/3 Применимость: Паттерн Заместитель применяется в Java коде тогда, когда надо заменить настоящий объект его суррогатом, причём незаметно для клиентов настоящего объекта. Это позволит выполнить какие-то добавочные поведения до или после основного поведения настоящего объекта. Источник
oleh ronin Уровень 47
14 марта 2024
8). Мост — это структурный паттерн, который разделяет бизнес-логику или большой класс на несколько отдельных иерархий, которые потом можно развивать отдельно друг от друга. Одна из этих иерархий (абстракция) получит ссылку на объекты другой иерархии (реализация) и будет делегировать им основную работу. Благодаря тому, что все реализации будут следовать общему интерфейсу, их можно будет взаимозаменять внутри абстракции. Сложность: 3/3 Популярность: 1/3 Применимость: Паттерн Мост особенно полезен когда вам приходится делать кросс-платформенные приложения, поддерживать несколько типов баз данных или работать с разными поставщиками похожего API (например, cloud-сервисы, социальные сети и т. д.) Признаки применения паттерна: Если в программе чётко выделены классы «управления» и несколько видов классов «платформ», причём управляющие объекты делегируют выполнение платформам, то можно сказать, что у вас используется Мост. Источник
oleh ronin Уровень 47
14 марта 2024
9). Адаптер — это структурный паттерн, который позволяет подружить несовместимые объекты. Адаптер выступает прослойкой между двумя объектами, превращая вызовы одного в вызовы понятные другому. Сложность: 1/3 Популярность: 3/3 Применимость: Паттерн можно часто встретить в Java-коде, особенно там, где требуется конвертация разных типов данных или совместная работа классов с разными интерфейсами. Источник
oleh ronin Уровень 47
14 марта 2024
10). Что такое антипаттерны: Антипаттерн — это неэффективный, рискованный или непродуктивный подход к решению часто встречающихся проблем. Хорошее определение в целом, но чувствуется в нем некая стигматизация. Создается впечатление, что присутствие антипаттерна является следствием чьего-то злого умысла или «недалекости» специалиста, который это допустил. Зачем знать антипаттерны Чтобы это уяснить, приведем некоторые афоризмы, хорошо описывающие тему. Начнем с английской пословицы: «Лучше дьявол, которого знаешь, чем тот, которого не знаешь». Зная антипаттерны, вы понимаете, чего от них ждать. Можете заранее просчитать риски их использования в отличие от неизвестных вам антипаттернов. Что делать с антипаттернами: Первое — стараться их избегать. Кроме того, необходимо грамотно оценивать риски от наличия или использования антипаттерна. Далее следует найти причину использования антипаттерна, для чего вспомнить несколько законов архитектуры: а) любое решение является компромиссом; б) вопрос «почему?» важнее вопроса «как?». Последнее — антипаттерны нужно приручить и контролировать. Источник