Рубрики
Без рубрики

Шаблон махового веса

Используйте общий доступ для эффективной поддержки большого количества мелкозернистых объектов. Участники… Помеченный как структурный, шаблон, шаблон дизайна, java.

Используйте общий доступ для эффективной поддержки большого количества мелкозернистых объектов.

  • Муха: объявляет интерфейс, через который муха может получать и воздействовать на внешнее состояние.
  • ConcreteFlyweight: реализует интерфейс Flyweight и добавляет хранилище для внутреннего состояния, если таковое имеется. Объект с конкретным весом должен быть разделяемым. Любое состояние, которое он хранит, должно быть внутренним, то есть оно должно быть независимым от контекста объекта ConcreteFlyweight.
  • UnsharedConcreteFlyweight: не все подклассы Flyweight должны быть общими. Интерфейс Flyweight позволяет обмениваться данными, но не обеспечивает их соблюдение. Для объектов UnsharedConcreteFlyweight обычно объекты concreteflyweight являются дочерними объектами на некотором уровне структуры объектов flyweight (как у классов строк и столбцов).
  • FlyweightFactory: создает объекты flyweight и управляет ими. Гарантирует, что максимальный вес распределяется должным образом. Когда клиент запрашивает максимальный вес, объекты FlyweightFactory активируют существующий экземпляр или создают его, если таковой не существует.
  • Клиент: поддерживает ссылку на максимальный вес(-ы). Вычисляет или сохраняет внешнее состояние веса(ов).
public class Main {

    public static void main(String[] args) {
        int extrinsicstate = 22;
        FlyweightFactory factory = new FlyweightFactory();
        Flyweight fx = factory.getFlyweight("X");
        fx.operation(--extrinsicstate);
        Flyweight fy = factory.getFlyweight("Y");
        fy.operation(--extrinsicstate);
        Flyweight fz = factory.getFlyweight("Z");
        fz.operation(--extrinsicstate);
        UnsharedConcreteFlyweight fu = new UnsharedConcreteFlyweight();
        fu.operation(--extrinsicstate);
    }
}

public class FlyweightFactory {
    private Hashtable flyweights = new Hashtable<>();

    public FlyweightFactory() {
        flyweights.put("X", new ConcreteFlyweight());
        flyweights.put("Y", new ConcreteFlyweight());
        flyweights.put("Z", new ConcreteFlyweight());
    }

    public Flyweight getFlyweight(String key) {
        return ((Flyweight) flyweights.get(key));
    }
}

public interface Flyweight {
    void operation(int extrinsicstate);
}

public class ConcreteFlyweight implements Flyweight {

    @Override
    public void operation(int extrinsicstate) {
        System.out.println("ConcreteFlyweight: " + extrinsicstate);
    }
}

public class UnsharedConcreteFlyweight implements Flyweight {

    @Override
    public void operation(int extrinsicstate) {
        System.out.println("UnsharedConcreteFlyweight: " + extrinsicstate);
    }
}
ConcreteFlyweight: 21
ConcreteFlyweight: 20
ConcreteFlyweight: 19
UnsharedConcreteFlyweight: 18

eidherjulian61/дизайн-шаблоны

Основные шаблоны Проектирования

ид ・ 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/flyweight-pattern-3mfn”