Uzorak muhe u Javi

1. Pregled

U ovom ćemo članku pogledati uzorak dizajna muha. Ovaj obrazac koristi se za smanjenje memorijskog otiska. Također može poboljšati izvedbu u aplikacijama gdje je instancija objekta skupa.

Jednostavno rečeno, uzorak muha temelji se na tvornici koja reciklira stvorene predmete spremajući ih nakon stvaranja. Svaki put kad se zatraži objekt, tvornica traži objekt kako bi provjerila je li već stvoren. Ako jest, vraća se postojeći objekt - u suprotnom se stvara novi, pohranjuje i vraća.

Stanje letećeg objekta sastoji se od invarijantne komponente koja se dijeli s drugim sličnim objektima (unutarnji) i komponenta varijante kojom se može upravljati klijentskim kodom (vanjski).

Vrlo je važno da su predmeti muhe nepromjenjivi: bilo koju operaciju države mora izvesti tvornica.

2. Provedba

Glavni elementi uzorka su:

  • sučelje koje definira operacije koje klijentski kôd može izvesti na muhastom objektu
  • jedna ili više konkretnih implementacija našeg sučelja
  • tvornica koja obrađuje instanciranje i predmemoriranje objekata

Pogledajmo kako implementirati svaku komponentu.

2.1. Sučelje vozila

Za početak ćemo stvoriti Vozilo sučelje. Budući da će ovo sučelje biti vrsta povrata tvorničke metode, moramo osigurati izlaganje svih relevantnih metoda:

javni void start (); zaustavljanje javne praznine (); javna boja getColor ();

2.2. Betonsko vozilo

Dalje, napravimo a Automobil razred kao beton Vozilo. Naš će automobil implementirati sve metode sučelja vozila. Što se tiče stanja, imat će motor i polje boje:

privatni motor motora; privatna boja u boji;

2.3. Tvornica vozila

Posljednje, ali ne najmanje važno, mi ćemo stvoriti Fabrika vozila. Izgradnja novog vozila vrlo je skupa operacija pa će tvornica stvoriti samo jedno vozilo po boji.

Da bismo to učinili, pratimo kreirana vozila koristeći kartu kao jednostavnu predmemoriju:

privatna statička karta vozilaCache = novi HashMap (); javni statični Vozilo createVehicle (boja u boji) {Vehicle newVehicle = vehiclesCache.computeIfAbsent (color, newColor -> {Engine newEngine = new Engine (); return new Car (newEngine, newColor);}); povratak newVehicle; }

Primijetite kako klijentski kod može utjecati samo na vanjsko stanje objekta (boju našeg vozila) prosljeđujući ga kao argument createVehicle metoda.

3. Koristite slučajeve

3.1. Kompresija podataka

Cilj muha uzorka je smanjiti upotrebu memorije dijeljenjem što više podataka, što je dobra osnova za algoritme kompresije bez gubitaka. U ovom slučaju, svaki muharski objekt djeluje kao pokazivač s vanjskim stanjem koje ovisi o kontekstu.

Klasičan primjer ove upotrebe je u programu za obradu teksta. Ovdje je svaki lik muharski objekt koji dijeli podatke potrebne za generiranje. Kao rezultat, samo položaj znaka unutar dokumenta zauzima dodatnu memoriju.

3.2. Keširanje podataka

Mnoge moderne aplikacije koriste predmemoriju kako bi poboljšale vrijeme odziva. Uzorak muhe je sličan osnovnom konceptu predmemorije i može dobro odgovarati toj svrsi.

Naravno, postoji nekoliko ključnih razlika u složenosti i provedbi između ovog uzorka i tipične predmemorije opće namjene.

4. Zaključak

Da rezimiramo, ovaj se brzi vodič usredotočio na uzorak dizajna muha u Javi. Također smo provjerili neke od najčešćih scenarija koji uključuju obrazac.

Sav kôd iz primjera dostupan je na projektu GitHub.