Какие знаешь паттерны в стандартной библиотеке Java?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Дизайн-паттерны в стандартной библиотеке 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. Понимание этих паттернов помогает разбираться в стандартной библиотеке и писать код более грамотно.