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: InputStreamFileInputStream, BufferedInputStream, GZIPInputStream; ReaderBufferedReader, LineNumberReader;
  • Порядок декораторов важен;

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.