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](https://cdn.codegym.cc/images/article/73f76c69-6b2a-4034-9207-93871bb16fae/800.jpeg)
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](https://cdn.codegym.cc/images/article/fa045df5-58b9-4433-bc35-45548f452406/800.jpeg)
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](https://cdn.codegym.cc/images/article/780f7d14-5ad3-42e2-bbfe-409cef49851e/512.jpeg)
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?