Hardflyweight
Что такое Flyweight pattern?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Flyweight — разделение общего состояния между объектами для экономии памяти. Intrinsic состояние — разделяемое (не меняется), extrinsic — уникальное (передаётся в методы).
// Разделяемый intrinsic (font/glyph), extrinsic — position
class Glyph {
private final char character; // intrinsic
private final Font font; // intrinsic
void render(int x, int y) { /* x,y — extrinsic */ }
}
class GlyphFactory {
private final Map<String, Glyph> pool = new HashMap<>();
public Glyph get(char c, Font f) {
return pool.computeIfAbsent(c + ":" + f, k -> new Glyph(c, f));
}
}Java examples:
Integer.valueOf(int)— кэш -128..127;- String pool;
Boolean.TRUE/Boolean.FALSE— два объекта;Pattern.compile— reusing.
Применять когда много похожих объектов и память критична.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.