Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.

@bookjava
🔥 5 паттернов проектирования, которые должен знать каждый Java-разработчик В мире Java есть сотни паттернов проектирования, но эти 5 используются чаще всего. Если вы их освоите, ваш код станет чище, гибче и легче в поддержке. 1️⃣ Singleton Ограничивает создание объекта одним экземпляром. Полезен для логирования, работы с базами данных, кэшей. 🔹 Пример кода (Lazy Initialization, thread-safe): public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ⚡ Используется в Spring Bean, Hibernate SessionFactory. 2️⃣ Factory Method Позволяет создавать объекты без привязки к конкретному классу. Отлично подходит, если у вас много типов объектов с общей логикой. 🔹 Пример: interface Product { void create(); } class ConcreteProductA implements Product { public void create() { System.out.println("Создан продукт A"); } } class ProductFactory { public static Product createProduct(String type) { if ("A".equals(type)) return new ConcreteProductA(); throw new IllegalArgumentException("Неизвестный тип продукта"); } } ⚡ Используется в JDBC (DriverManager.getConnection). 3️⃣ Builder Позволяет создавать сложные объекты пошагово. Альтернатива длинным конструкторам с кучей параметров. 🔹 Пример (Lombok @Builder делает его проще!): @Builder public class Car { private String model; private int year; private String engine; } Car car = Car.builder().model("Tesla").year(2024).engine("Electric").build(); ⚡ Используется в StringBuilder, HttpRequest в Java 11+. 4️⃣ Observer Позволяет подписаться на события и реагировать на них. Часто используется в GUI, event-driven системах. 🔹 Пример (наблюдатель за событиями): interface Observer { void update(String message); } class User implements Observer { private String name; public User(String name) { this.name = name; } public void update(String message) { System.out.println(name + " получил уведомление: " + message); } } class Channel { private List<Observer> observers = new ArrayList<>(); public void subscribe(Observer o) { observers.add(o); } public void notifyAll(String message) { for (Observer o : observers) { o.update(message); } } } ⚡ Используется в Spring Events, RxJava. 5️⃣ Decorator Добавляет функциональность объекту без изменения его структуры. Часто применяется в логгировании, кешировании, потоках IO. 🔹 Пример (логирование обертки над OutputStream): class LoggingOutputStream extends OutputStream { private OutputStream wrapped; public LoggingOutputStream(OutputStream wrapped) { this.wrapped = wrapped; } @Override public void write(int b) throws IOException { System.out.println("Записываем байт: " + b); wrapped.write(b); } } ⚡ Используется в BufferedReader, Logger, Spring Security Filters. Если вы хотите писать гибкий и масштабируемый код, обязательно используйте паттерны проектирования. 👉 @BookJava
Если у вас установлено приложение,
вы можете сразу перейти в канал