Лек модел в Java

1. Общ преглед

В тази статия ще разгледаме модела на дизайна на мухата. Този модел се използва за намаляване на отпечатъка на паметта. Той може също така да подобри производителността в приложения, където инстанцирането на обект е скъпо.

Най-просто казано, моделът на летящото тегло се основава на фабрика, която рециклира създадени обекти, като ги съхранява след създаването. Всеки път, когато се иска обект, фабриката търси обекта, за да провери дали вече е създаден. Ако има, се връща съществуващия обект - в противен случай се създава нов, съхранява се и след това се връща.

Състоянието на летящия обект се състои от инвариантен компонент, споделен с други подобни обекти ( присъщ ) и вариантния компонент, който може да се манипулира от клиентския код ( външен ).

Много е важно обектите с муха да са неизменни: всяка операция върху състоянието трябва да се извършва от фабриката.

2. Прилагане

Основните елементи на шаблона са:

  • интерфейс, който дефинира операциите, които клиентският код може да изпълни върху обекта с летяща тежест
  • една или повече конкретни реализации на нашия интерфейс
  • фабрика за обработка на екземпляри и кеширане на обекти

Нека да видим как да приложим всеки компонент.

2.1. Интерфейс на превозното средство

Като начало ще създадем интерфейс за превозно средство . Тъй като този интерфейс ще бъде типът на връщане на фабричния метод, трябва да се уверим, че излагаме всички съответни методи:

public void start(); public void stop(); public Color getColor();

2.2. Бетонно превозно средство

След това нека направим клас Автомобил като конкретно превозно средство. Нашата кола ще внедри всички методи на интерфейса на автомобила. Що се отнася до състоянието му, той ще има двигател и цветно поле:

private Engine engine; private Color color;

2.3. Фабрика за превозни средства

Не на последно място ще създадем VehicleFactory . Изграждането на ново превозно средство е много скъпа операция, така че фабриката ще създаде само по едно превозно средство на цвят.

За да направим това, ние следим създадените превозни средства, използвайки карта като обикновен кеш:

private static Map vehiclesCache = new HashMap(); public static Vehicle createVehicle(Color color) { Vehicle newVehicle = vehiclesCache.computeIfAbsent(color, newColor -> { Engine newEngine = new Engine(); return new Car(newEngine, newColor); }); return newVehicle; }

Забележете как клиентският код може да повлияе само на външното състояние на обекта (цвета на нашето превозно средство), предавайки го като аргумент на метода createVehicle .

3. Използвайте калъфи

3.1. Компресиране на данни

Целта на модела на мухата е да намали използването на паметта, като споделя възможно най-много данни, следователно това е добра основа за алгоритми за компресиране без загуби. В този случай всеки обект с летателна тежест действа като указател, като неговото външно състояние е зависима от контекста информация.

Класически пример за това използване е в текстов процесор. Тук всеки знак е обект с муха, който споделя данните, необходими за изобразяването. В резултат на това само позицията на знака в документа заема допълнителна памет.

3.2. Кеширане на данни

Много съвременни приложения използват кешове, за да подобрят времето за реакция. Моделът на мухата е подобен на основната концепция на кеша и може да се побере добре за тази цел.

Разбира се, има няколко ключови разлики в сложността и изпълнението между този модел и типичен кеш с общо предназначение.

4. Заключение

В обобщение, този бърз урок се фокусира върху модела на дизайна на мухата в Java. Също така проверихме някои от най-често срещаните сценарии, които включват модела.

Целият код от примерите е достъпен в проекта GitHub.