/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/java/java-503-18-027/main.java
51 строка
2 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
// Абстракция: контракт public interface Logger { void log(LogLevel level, String message); } // Абстрактный класс: частичная реализация + инкапсуляция public abstract class BufferedLogger implements Logger { private final Queue<String> buffer = new LinkedList<>(); private final int bufferSize; protected BufferedLogger(int bufferSize) { this.bufferSize = bufferSize; } @Override public final void log(LogLevel level, String message) { String entry = format(level, message); buffer.add(entry); if (buffer.size() >= bufferSize) { flush(); } } protected abstract String format(LogLevel level, String message); protected abstract void writeBatch(List<String> batch); private void flush() { List<String> batch = new ArrayList<>(buffer); buffer.clear(); writeBatch(batch); // делегирование — инкапсуляция внутреннего буфера сохраняется } } // Конкретная реализация — полиморфизм в действии public class FileLogger extends BufferedLogger { private final PrintWriter writer; public FileLogger(int bufferSize, PrintWriter writer) { super(bufferSize); this.writer = writer; } @Override protected String format(LogLevel level, String message) { return Instant.now() + " [" + level + "] " + message; } @Override protected void writeBatch(List<String> batch) { batch.forEach(writer::println); writer.flush(); } }