Vzor mušej váhy v Jave

1. Prehľad

V tomto článku sa pozrieme na návrhový vzor mušej váhy. Tento vzor sa používa na zmenšenie pamäťovej stopy. Môže tiež zlepšiť výkon v aplikáciách, kde je inštancia objektu drahá.

Jednoducho povedané, vzor zotrvačnej hmotnosti je založený na továrni, ktorá recykluje vytvorené objekty ich uložením po vytvorení. Zakaždým, keď je objekt požadovaný, továreň ho vyhľadá, aby skontrolovala, či už bol vytvorený. Ak existuje, vráti sa existujúci objekt - inak sa vytvorí nový, uloží sa a potom sa vráti späť.

Stav mušej váhy je zložený z invariantného komponentu zdieľaného s inými podobnými objektmi (vnútorná) a variantný komponent, s ktorým je možné manipulovať kódom klienta (vonkajšie).

Je veľmi dôležité, aby objekty s mušou váhou boli nemenné: každú operáciu na štáte musí vykonať továreň.

2. Implementácia

Hlavné prvky vzoru sú:

  • rozhranie, ktoré definuje operácie, ktoré môže kód klienta vykonávať s objektom mušej váhy
  • jedna alebo viac konkrétnych implementácií nášho rozhrania
  • továreň na spracovanie inštancií a ukladania do pamäte cache

Pozrime sa, ako implementovať jednotlivé komponenty.

2.1. Rozhranie vozidla

Na začiatok vytvoríme Vozidlo rozhranie. Pretože toto rozhranie bude návratovým typom továrenskej metódy, musíme sa uistiť, že sme odhalili všetky príslušné metódy:

public void start (); verejné neplatné zastavenie (); public Color getColor ();

2.2. Betónové vozidlo

Ďalej urobíme a Auto triedy ako betón Vozidlo. Naše auto bude implementovať všetky metódy rozhrania vozidla. Pokiaľ ide o jeho stav, bude mať motor a farebné pole:

súkromný motor motora; súkromná farebná farba;

2.3. Továreň na vozidlá

V neposlednom rade vytvoríme VehicleFactory. Výroba nového vozidla je veľmi nákladná operácia, takže továreň vytvorí iba jedno vozidlo na každú farbu.

Aby sme to dosiahli, sledujeme vytvorené vozidlá pomocou mapy ako jednoduchej vyrovnávacej pamäte:

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);}); vrátiť novéVozidlo; }

Všimnite si, ako môže kód klienta ovplyvniť iba vonkajší stav objektu (farbu nášho vozidla) a odovzdať ho ako argument createVehicle metóda.

3. Používajte puzdrá

3.1. Kompresia dát

Cieľom vzoru mušej váhy je znížiť využitie pamäte zdieľaním čo najväčšieho množstva dát, a preto je to dobrý základ pre bezstratové kompresné algoritmy. V takom prípade funguje každý objekt muší váhy ako ukazovateľ, pričom jeho vonkajším stavom sú informácie závislé od kontextu.

Klasickým príkladom tohto použitia je textový procesor. Tu je každý znak objektom mušej váhy, ktorý zdieľa údaje potrebné na vykreslenie. Vo výsledku zaberá ďalšiu pamäť iba poloha znaku vo vnútri dokumentu.

3.2. Ukladanie údajov do pamäte cache

Mnoho moderných aplikácií využíva pamäte cache na zlepšenie času odozvy. Vzor mušej váhy je podobný základnému konceptu vyrovnávacej pamäte a na tento účel môže dobre vyhovovať.

Medzi týmto vzorom a typickou univerzálnou medzipamäťou samozrejme existuje niekoľko kľúčových rozdielov v zložitosti a implementácii.

4. Záver

Stručne povedané, tento rýchly tutoriál sa zameral na návrhový vzor mušej váhy v Jave. Skontrolovali sme tiež niektoré z najbežnejších scenárov, ktoré zahŕňajú daný vzor.

Celý kód z príkladov je k dispozícii v rámci projektu GitHub.


$config[zx-auto] not found$config[zx-overlay] not found