4.1 Építő

A Builder egy generatív tervezési minta, amely módot biztosít összetett objektumok létrehozására.

Elválasztja egy összetett objektum felépítését a reprezentációjától, így ugyanaz az építési folyamat különböző ábrázolásokat eredményezhet.

Építész

Erősségek:

  • lehetővé teszi a termék belső megjelenítésének megváltoztatását;
  • elkülöníti a felépítést és megjelenítést megvalósító kódot;
  • pontosabban irányítja a tervezési folyamatot.

Gyenge oldalak:

  • az összetett objektum létrehozásának algoritmusa nem függhet attól, hogy az objektum milyen részekből áll, és hogyan illeszkednek egymáshoz;
  • az építési folyamatnak az építés alatt álló objektum különböző ábrázolását kell biztosítania.

Jó példa erre a HttpRequest osztály, amelynek van egy HttpRequest.Builder alosztálya, amely a HttpRequest osztály példányainak létrehozására és érvényességük biztosítására használható.

4.2 Lusta inicializálás

A lusta inicializálás olyan programozási technika, amikor valamilyen erőforrás-igényes műveletet (objektum létrehozása, értékszámítás) közvetlenül az eredmény felhasználása előtt hajtanak végre.

Így az inicializálás „igény szerint” történik, és nem előre. Egy hasonló ötlet számos területen alkalmazható: például az on-the-fly összeállításban és a Just-in-Time logisztikai koncepcióban.

Lusta inicializálás

A lusta inicializálás egy speciális esete - az objektum létrehozása a hozzáféréskor - az egyik generatív tervezési minta. Általában olyan mintákkal együtt használatos, mint a Factory Method, Loner és Proxy.

Erősségek:

  • Az inicializálás csak akkor történik meg, ha valóban szükség van rá;
  • Az alkalmazás kezdeti inicializálása felgyorsul: minden elhalasztható, amit el lehet halasztani.

Gyenge oldalak:

  • Az objektumok inicializálásának sorrendjét nem lehet kifejezetten beállítani;
  • Késés van az objektum első elérésekor, ami kritikus lehet, ha párhuzamosan egy másik erőforrás-igényes műveletet hajtanak végre. Emiatt alaposan meg kell fontolni a lusta inicializálás megfelelőségét többszálú szoftverrendszerekben.

Emlékszel, hogy a web.xml írásakor hogyan adhatta meg a szervletek kezdő sorrendjét? Ez pontosan a lusta betöltés eredménye. A Tomcat az első hozzáféréskor servlet objektumokat hoz létre.

4.3 Objektumkészlet

Az objektumkészlet egy szülő tervezési minta, inicializált és használatra kész objektumok halmaza. Amikor a rendszernek szüksége van egy objektumra, az nem jön létre, hanem kiveszi a készletből. Amikor egy tárgyra már nincs szükség, nem semmisül meg, hanem visszakerül a medencébe.

objektumkészlet

Az objektumkészletezést a teljesítmény javítására használják, amikor egy objektum létrehozása a feladat elején, és a végén megsemmisítése költséges. A teljesítménynövekedés különösen akkor észrevehető, ha az objektumokat gyakran hoznak létre és semmisítik meg, de egyidőben csak kis számú objektum létezik.

Az objektumkészlet akkor hasznos, ha egy objektum a memórián kívül más erőforrásokkal is rendelkezik, például hálózati socketekkel. Vagy ha az objektumok gyűjteménye a számítógép memóriájának jelentős részét elfoglalja, és sok „szemét” keletkezik.

Emlékszel, a Tomcat minden kérést külön szálban hajt végre. A szálak azonban nem jönnek létre minden alkalommal újra, hanem a szálkészletben tárolódnak. Ez lehetővé teszi a kérések gyorsabb végrehajtását: ha egy szálra van szükség, azt egyszerűen a készletből veszik. Egyébként a kérdés az: hogyan tennéd be a futószálat a medencébe és hogyan vennéd ki a medencéből?