Flyweight — это
Простыми словами:
▪️ Пример
// Flyweight — легковес с общим состоянием
class CharacterStyle {
private final String font; // внутреннее состояние
private final int size; // (intrinsic)
private final String color;
public CharacterStyle(String font, int size, String color) {
this.font = font;
this.size = size;
this.color = color;
}
public void render(char character, int x, int y) { // внешнее состояние
System.out.println("Рендер '" + character +
"' в позиции (" + x + "," + y + ")");
}
}
// Фабрика для переиспользования flyweight-объектов
class StyleFactory {
private Map<String, CharacterStyle> styles = new HashMap<>();
public CharacterStyle getStyle(String font, int size, String color) {
String key = font + size + color;
return styles.computeIfAbsent(key,
k -> new CharacterStyle(font, size, color));
}
}
// Использование
StyleFactory factory = new StyleFactory();
// Миллион символов используют всего несколько объектов стилей
CharacterStyle arial12 = factory.getStyle("Arial", 12, "black");
arial12.render('H', 0, 0);
arial12.render('e', 10, 0);
arial12.render('l', 20, 0);
arial12.render('l', 30, 0);
arial12.render('o', 40, 0);
▪️ Когда использовать
—
—
—
—
▪️ Минусы
—
—
#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1🔥1
Основное отличие в
Виртуальная машина виртуализирует железо целиком:
Docker виртуализирует только уровень приложения.
🔹 На практике это означает
— Docker
— VM даёт
— Для микросервисов обычно выбирают
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥1😁1
→ throw — это когда один разработчик бросает исключение в другого.
→ throws — это когда вся команда бросает код в прод без ревью.
Ключевое: чем больше 's' в конце, тем больше народу пострадает.
→ throw — это оператор, который
throw new IllegalArgumentException("Ошибка");→ throws — это ключевое слово в
public void readFile() throws IOException {
// код
}😁 → Да
🔥 → Нет
#core
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35🔥6👍1