Decorator — это структурный паттерн, который позволяет динамически добавлять объектам новые обязанности, оборачивая их в "декораторы". Это полезно для расширения функциональности без изменения существующего кода.
Использование:
🔹 Для динамического добавления поведения объектам без изменения их кода.
🔹 Для разделения функциональности на отдельные классы, чтобы избежать создания монолитных классов с множеством обязанностей.
🔹 Когда нужно добавлять новые функции не только для одного объекта, но и для всех его потомков.
Преимущества:
Недостатки:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
FileChannel
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
👉 Java Rocks | #java
FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.
Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.
FileChannel эффективнее потокового ввода-вывода, т. к. избавляет от накладных расходов на создание объектов и буферизацию.
Используется в приложениях, где нужна высокая производительность работы с файлами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false
Integer x = 1;
Integer y = 1;
System.out.println(x == y); // true
Это не просто волшебство! Это связано с целочисленным кэшированием в Java.
Для значений в диапазоне от -128 до 127 объекты типа
Integer кэшируются, и ссылки на них одинаковы, а для значений за пределами этого диапазона создаются новые объекты, и ссылки на них будут разными. Так как используется оператор ==, то сравниваются ссылки на объекты.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
10 лучших Java-проектов для начинающих 2024 года с исходным кодом
Написать с нуля небольшой, но полноценный проект на Java — отличный способ прочувствовать особенности языка, потренировать полезные паттерны программирования. Если вы хотите начать изучение Java или расширить свое портфолио, эти проекты идеально подходят для повышения уровня ваших навыков.
⛓ Ссылка: тык
👉 Java Rocks | #ресурсы
Написать с нуля небольшой, но полноценный проект на Java — отличный способ прочувствовать особенности языка, потренировать полезные паттерны программирования. Если вы хотите начать изучение Java или расширить свое портфолио, эти проекты идеально подходят для повышения уровня ваших навыков.
Please open Telegram to view this post
VIEW IN TELEGRAM
public class Quest {
public static void main(String[] args) {
int x = 1;
System.out.println("x+1 = " + x+1);
}
}👎5😁4
В Java 8 появился новый способ улучшить читаемость кода — ссылки на методы. Это позволяет ссылаться на существующие методы без их вызова, делая код более кратким и понятным.
🔍 Типы метод-референсов:
Пример: Integer::parseInt
Пример: myObject::toString
Пример: String::toUpperCase
Пример: ArrayList::new
⚡️ Пример использования:
Вместо стандартной лямбды:
list.forEach(item -> System.out.println(item));
Можно использовать ссылку на метод:
list.forEach(System.out::println);
А Вы используете ссылки на методы в своих проектах?👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Инкапсуляция
Инкапсуляция — это принцип ООП, который заключается в сокрытии внутреннего представления класса от внешнего мира. Для этого используются модификаторы доступа: private, protected, public.
Обычно поля класса делаются private или protected, а методы — public. Это позволяет скрыть реализацию класса и предоставить к ней контролируемый доступ через public методы.
При запуске этой программы на выходе мы получим:
John 0
👉 Java Rocks | #java
Инкапсуляция — это принцип ООП, который заключается в сокрытии внутреннего представления класса от внешнего мира. Для этого используются модификаторы доступа: private, protected, public.
Обычно поля класса делаются private или protected, а методы — public. Это позволяет скрыть реализацию класса и предоставить к ней контролируемый доступ через public методы.
При запуске этой программы на выходе мы получим:
John 0
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Операция
dropWhile служит дополнением к операции takeWhile. Она отбрасывает первые элементы, для которых предикат возвращает true. Как только результат вычисления предиката становится ложным, она прекращает работу и возвращает все оставшиеся элементы, причем работает даже в том случае, если число оставшихся элементов бесконечно!
List<Integer> ints = List.of(1,2,3,4,5,6,7,8,9);
ints.stream()
.dropWhile(i -> i < 5)
.forEach(System.out::println);
// 5 6 7 8 9
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В этой статье разбираются алгоритмы сортировки Java и примеры их реализации. В том числе выясняется, как выбрать подходящий алгоритм для конкретной задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
robotdreams.cc
Повний гайд з алгоритмів сортування на Java для новачків
Вчимося працювати з масивами та списками
👍2
public class Quest {
public static void main(String[] args) {
int x = 5;
int y = 8;
if (x++ > 5 && ++y > 8) {
x++;
}
System.out.println("x = " + x + ", y = " + y);
}
}👍3🤨1
Command — это поведенческий паттерн, который превращает запросы в объекты, позволяя параметризировать методы другими запросами, ставить запросы в очередь или логировать их.
Использование:
🔹 Для отделения отправителя запроса от объекта, который выполняет действие, чтобы упростить изменение или отмену команд.
🔹 Для реализации очередей команд или их многоуровневой отмены.
🔹 Для логирования команд с возможностью их повторного выполнения.
Преимущества:
Недостатки:
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Scheduler — это часть Spring Framework, которая позволяет планировать и выполнять задачи в заданное время или по расписанию. Он избавляет от необходимости интеграции сторонних библиотек, предлагая встроенные решения для управления задачами.
Виды задач:
- @Scheduled — аннотация для запуска методов по расписанию.
- TaskScheduler — интерфейс для более гибкого управления задачами.
- Cron-выражения — для сложных расписаний.
- Простота использования за счёт минимальной конфигурации.
- Интеграция с другими частями Spring.
- Поддержка CRON-выражений для гибкости.
- Ограниченная поддержка в распределённых системах.
- Возможные сложности с тестированием задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
~ Побитовый унарный оператор NOT;& Побитовый AND;&= Побитовый AND с присваиванием;| Побитовый OR;|= Побитовый OR с присваиванием;^ Побитовый исключающее XOR;^= Побитовый исключающее XOR с присваиванием;>> Сдвиг вправо (деление на 2 в степени сдвига);>>= Сдвиг вправо с присваиванием;>>> Сдвиг вправо без учёта знака;>>>= Сдвиг вправо без учёта знака с присваиванием;<< Сдвиг влево (умножение на 2 в степени сдвига);<<= Сдвиг влево с присваиванием.Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Microservices Project using Spring Boot
Подробный гайд по созданию микросервисов с использованием Spring Boot.
В этом учебном пособии показано как создавать микросервис с использованием Spring Boot 3, Spring Cloud и базы данных PostgreSQL.
В этом микросервисном проекте вы изучите такие важные понятия, как
⛓ Ссылка: тык
👉 Java Rocks | #ресурсы
Подробный гайд по созданию микросервисов с использованием Spring Boot.
В этом учебном пособии показано как создавать микросервис с использованием Spring Boot 3, Spring Cloud и базы данных PostgreSQL.
В этом микросервисном проекте вы изучите такие важные понятия, как
API Gateway, Config Server, Discovery Server, и практически реализуете два реальных микросервиса - Student и School.Please open Telegram to view this post
VIEW IN TELEGRAM
class Person {
Long id;
String name;
public Person(Long id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
System.out.print(1);
if (obj == this) {
return true;
}
if (obj instanceof Person person) {
return id.equals(person.id);
}
return false;
}
}
public class Quest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person(1L, "Leo"));
list.add(new Person(2L, "Raph"));
list.add(new Person(3L, "Donnie"));
list.add(new Person(4L, "Mikey"));
list.contains(new Person(3L, "Shredder"));
}
}— Порождающие паттерны:
🔹Abstract Factory: Family Creator — Создает группы взаимосвязанных объектов.
🔹Builder: Lego Master — Пошагово создает объекты.
🔹Prototype: Clone Maker — Создает копии полностью подготовленных объектов.
🔹Singleton: One and Only — Создаёт объект, который существует в единственном экземпляре.
— Структурные паттерны:
🔹Adapter: Universal Plug — Соединяет объекты с разными интерфейсами.
🔹Bridge: Function Connector — Связывает то, как объект работает, с тем, что он делает.
🔹Composite: Tree Builder — Формирует древовидные структуры из простых и сложных частей.
🔹Decorator: Customizer — Добавляет новые возможности объектам, не изменяя их основную структуру.
🔹Facade: One-Stop-Shop — Представляет всю систему через один упрощенный интерфейс.
🔹Flyweight: Space Saver — Эффективно использует небольшие, многократно используемые объекты.
🔹Proxy: Stand-In Actor — Представляет другой объект, управляя доступом или действиями.
— Поведенческие паттерны:
🔹Chain of Responsibility: Request Relay — Передает запросы через цепочку объектов до тех пор, пока он не будет обработан.
🔹Command: Task Wrapper — Превращает запрос в объект, готовый к выполнению.
🔹Iterator: Collection Explorer — Доступ к элементам коллекции по одному.
🔹Mediator: Communication Hub — Упрощает взаимодействие между различными классами.
🔹Memento: Time Capsule — Сохраняет и восстанавливает состояние объекта.
🔹Observer: News Broadcaster — Уведомляет классы о изменениях в других объектах.
🔹Visitor: Skillful Guest — Добавляет новые операции в класс, не изменяя его.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1