TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10K subscribers
Post #3610 1.83K
🔥 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
  • 👍 11
  • 🥰 4
  • 🏆 4
  • ❤ 1
More from @bookjava
  1. Oct 5, 2026🧠 Dependency Inversion Principle (D в SOLID) Зависимости должны идти от высокоуровневой п…
  2. Sep 30, 2026Три похожих слова в Java — final, finally, finalize — но смысл у них совершенно разный. Ра…
  3. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  4. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  5. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  6. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →