«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Наилегчайший вес

Наилегчайший вес

Опубликовано 6 ноября 2024 г.
Просматривать:411

Flyweight

Один из структурных шаблонов направлен на сокращение использования памяти за счет совместного использования как можно большего количества данных с похожими объектами.
Это особенно полезно при работе с большим количеством похожих объектов, где создание нового экземпляра для каждого объекта будет затратным с точки зрения потребления памяти.
ключевые понятия:
Внутреннее состояние: состояние, которое является общим для нескольких объектов, не зависит от контекста и остается одинаковым для разных объектов.
Внешнее состояние: состояние, уникальное для каждого объекта и передаваемое от клиента. Это состояние может меняться и не сохраняется в объекте Flyweight

Ключевые участники:

Приспособленец: интерфейс, позволяющий объекту Приспособленца получать внешнее состояние и использовать его.
ConcreteFlyweight: реализует Flyweight и сохраняет внутреннее состояние.
FlyweightFactory: управляет объектами-приспособленцами и обеспечивает совместное использование интерфейсов. Возвращает существующий приспособитель, если он уже существует.

Клиент (например, основной класс): поддерживает ссылку на легковес и предоставляет внешнее состояние, когда ему необходимо взаимодействовать с объектом легковеса.

Давайте возьмем пример объекта-персонажа «Легкий вес»
Предположим, у нас есть текстовый редактор, которому необходимо отобразить большой объем текста. Каждый персонаж может быть представлен как объект, но создание отдельного объекта для каждого персонажа приведет к потере большого количества памяти. Вместо этого мы можем использовать Flyweights для совместного использования символьных объектов, представляющих каждую букву, и сохранять внешнее состояние, такое как положение или форматирование, вне

Наилегчайший вес

public interface Flyweight {
    public void display(int x, int y);//x, y are the extrinsic state of the Flyweight object
}

Бетонный легковес

public class CharacterFlyweight implements Flyweight {
    private char ch;
    public CharacterFlyweight(char c){
        this.ch  = c;
    }
    @Override
    public void display(int x ,int y){
        System.out.println("[drawing character: " this.ch " at co-ordinates:(" x "," y ")]");
    }

}

FlyweightFactory

public class FlyweightFactory {
    private static HashMap flyweights = new HashMap();
    public static Flyweight getFlyweight(char c){
        Flyweight flyweight = flyweights.getOrDefault(c,null);
        if(null==flyweight){
            flyweight = new CharacterFlyweight(c);
            flyweights.put(c,flyweight);
        }
        return flyweight;
    }
}

Основной

public class Main {
    public static void main(String args[]){
        Flyweight flyweight1 = FlyweightFactory.getFlyweight('a');
        Flyweight flyweight2 = FlyweightFactory.getFlyweight('b');
        Flyweight flyweight3 = FlyweightFactory.getFlyweight('a');// will use the same object that is referenced by flyweight1

        flyweight1.display(1, 2);//'a' displayed at 1,2
        flyweight2.display(3, 4);//'b' displayed at 3,4
        flyweight3.display(5, 7); // 'a'(shared) displayed at 5,7
    }
}

Выход:

[drawing character: a at co-ordinates:(1,2)]
[drawing character: b at co-ordinates:(3,4)]
[drawing character: a at co-ordinates:(5,7)]

Ключевые моменты

  • Эффективность памяти: уменьшает использование памяти за счет совместного использования объектов, особенно когда внутреннее состояние велико или объектов много.
  • Улучшение производительности: сокращение количества создаваемых объектов позволяет повысить производительность приложения при управлении большим количеством объектов.

Недостатки
Сложность: шаблон может усложнить код, особенно при раздельном управлении внешними и внутренними состояниями.
Накладные расходы: если объектов для совместного использования мало, шаблон «Милегвес» может привести к ненужной сложности без значительной экономии памяти.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/prashantrmishra/flyweight-3k4b?1. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3