← Назад к вопросам

Какие знаешь паттерны в стандартной библиотеке Java?

2.0 Middle🔥 181 комментариев
#SOLID и паттерны проектирования#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Дизайн-паттерны в стандартной библиотеке Java

Дизайн-паттерны — это повторяемые решения типичных проблем в разработке ПО. Java Standard Library использует множество известных паттернов для решения различных задач.

Порождающие паттерны (Creational)

Singleton

Singleton — паттерн, который гарантирует, что класс имеет только один экземпляр.

public class Logger {
    private static Logger instance;
    private Logger() {}
    public static synchronized Logger getInstance() {
        if (instance == null) {
            instance = new Logger();
        }
        return instance;
    }
}

Примеры в Java:

  • Runtime.getRuntime() — единственный экземпляр runtime окружения
  • Calendar.getInstance() — фабрика для создания календарей
  • Desktop.getDesktop() — единственный экземпляр Desktop API

Factory (Фабрика)

Factory — паттерн для создания объектов без указания их конкретных классов.

public interface Connection {
    void connect();
}
public class ConnectionFactory {
    public static Connection createConnection(String type) {
        switch(type) {
            case "mysql": return new MySQLConnection();
            case "postgres": return new PostgresConnection();
            default: throw new IllegalArgumentException();
        }
    }
}

Примеры в Java:

  • Integer.valueOf(), Boolean.valueOf() — factory methods для обёрток
  • Collections.synchronizedList() — фабрика для синхронизированных коллекций
  • Arrays.asList() — создание List из массива

Builder

Builder — паттерн для построения сложных объектов пошагово.

public class StringBuilder {
    private char[] value;
    public StringBuilder append(String str) { }
    public String toString() { }
}

Примеры: StringBuilder, конфигурационные классы

Структурные паттерны (Structural)

Adapter (Адаптер)

Adapter — преобразует интерфейс одного класса в интерфейс другого.

InputStream input = new ByteArrayInputStream(data);
InputStreamReader reader = new InputStreamReader(input);
BufferedReader buffered = new BufferedReader(reader);

Примеры: InputStreamReader, OutputStreamWriter, Collections.enumeration()

Decorator (Декоратор)

Decorator — динамически добавляет новые функции к объекту.

InputStream fileStream = new FileInputStream("file.txt");
InputStream buffered = new BufferedInputStream(fileStream);
InputStream compressed = new GZIPInputStream(buffered);

Примеры: BufferedInputStream, GZIPInputStream, DataInputStream, Collections.unmodifiableList()

Proxy (Прокси)

Proxy — предоставляет заменяющий объект для контроля доступа.

Примеры: java.lang.reflect.Proxy, Spring @Transactional, JDK Proxy для AOP

Facade (Фасад)

Facade — предоставляет упрощённый интерфейс к сложной подсистеме.

Примеры: javax.sql.DataSource, java.util.Scanner, Spring JdbcTemplate

Поведенческие паттерны (Behavioral)

Iterator (Итератор)

Iterator — последовательный доступ к элементам коллекции.

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

Примеры: java.util.Iterator, все Collections, for-each цикл

Strategy (Стратегия)

Strategy — инкапсулирует алгоритмы в отдельные классы.

public interface Comparator<T> {
    int compare(T o1, T o2);
}
Arrays.sort(array, new CustomComparator());

Примеры: java.util.Comparator, ThreadFactory, функциональные интерфейсы Stream API

Observer (Наблюдатель)

Observer — оповещает множество объектов об изменениях.

Примеры: java.util.EventListener, ActionListener, MouseListener, Spring Application Events

Template Method (Шаблонный метод)

Template Method — определяет скелет алгоритма в базовом классе.

abstract class HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) {
        if ("GET".equals(req.getMethod())) {
            doGet(req, resp);
        }
    }
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) { }
}

Примеры: javax.servlet.http.HttpServlet, Collections.sort()

Chain of Responsibility (Цепочка ответственности)

Примеры: Servlet Filter Chain, Event handling в Swing

Заключение

Java Standard Library активно использует дизайн-паттерны для предоставления гибких и расширяемых API. Понимание этих паттернов помогает разбираться в стандартной библиотеке и писать код более грамотно.