Mediumdecorator
Что такое Decorator pattern?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Decorator — динамическое добавление поведения без наследования. Decorator реализует тот же interface, делегирует оборачиваемому объекту, добавляя функционал.
interface Coffee { BigDecimal cost(); }
class SimpleCoffee implements Coffee {
public BigDecimal cost() { return BigDecimal.valueOf(1); }
}
class MilkDecorator implements Coffee {
private final Coffee inner;
public MilkDecorator(Coffee c) { inner = c; }
public BigDecimal cost() { return inner.cost().add(BigDecimal.valueOf(0.5)); }
}
// Композиция декораторов
Coffee c = new SugarDecorator(new MilkDecorator(new SimpleCoffee()));- Альтернатива deep inheritance (
SugarMilkCoffee,MilkCoffee, ...); - JDK examples:
InputStream—FileInputStream,BufferedInputStream,GZIPInputStream;Reader—BufferedReader,LineNumberReader; - Порядок декораторов важен;
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.