Lusta betöltés
A lusta betöltés egy létrehozási programtervezési minta. Lényege, hogy elhalasztják az objektum létrehozását akkorra, amikor tényleg szükség van rá. Megfelelő használat esetén javíthatja a program válaszadási képességét és növelheti sebességét. Ellentéte a mohó betöltés. Akkor lehet vele sokat nyerni, ha nem feltétlenül van szükség arra, hogy inicializálódjon egy objektum, aminek inicializálása költséges.
Megvalósításai
szerkesztésA mintának négy gyakran használt megvalósítási módja van: lusta inicializáció; virtuális helyettes; szellem; értéktartó.[1] Mindegyiknek megvan a maga előnye és hátránya.
Lusta inicializáció
szerkesztésLusta inicializáció esetén az objektum referenciája először nullra állítódik. Az objektum hívásai ellenőrzik, hogy az objektum null-e, és ha igen, akkor létrehozzák. Példa C#-ban:
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get
{
if (myWidget == null)
{
myWidget = Widget.Load(myWidgetID);
}
return myWidget;
}
}
Vagy a '??' operátorral
private int myWidgetID;
private Widget myWidget = null;
public Widget MyWidget
{
get { return myWidget = myWidget ?? Widget.Load(myWidgetID); }
}
Ezt a legegyszerűbb megvalósítani, de mivel a null antimintának is tekinthető, szükség lehet egy null objektumra a null helyett.
Virtuális helyettes
szerkesztésA virtuális helyettes megvalósítja az objektum interfészeit. Ha először hívják az objektum metódusát, akkor betölt, és delegál.
Szellem
szerkesztésA szellem egy objektum, ami betölthető részlegesen. Először csak az objektum azonosítóját tartalmazza, és a többi adatot csak akkor tölti be, amikor először szükség van rájuk. Példaként tegyük fel, hogy a kliens a tartalomhoz online formában akar hozzáférni. Létrehozáskor tudjuk, hogy magára az objektumra szükség lesz, de nem tudjuk, hogy mely adatok kellenek, és mely metódusokat fogják hívni. PHP példa:
$userData = array (
"UID" = > uniqid(),
"requestTime" => microtime( true ),
"dataType" => "",
"request" => ""
);
if (isset( $_POST['data'] ) && $userData) {
//...
}
Értéktartó
szerkesztésAz értéktartó generikus objektum, ami megvalósítja a lusta betöltést, és az objektum adatmezői helyett jelenik meg.
C# példa:
private ValueHolder<Widget> valueHolder;
public Widget MyWidget
{
get
{
return valueHolder.GetValue();
}
}
Jegyzetek
szerkesztés- ↑ Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2003, pp.200-214. ISBN 0-321-12742-0.
Fordítás
szerkesztésEz a szócikk részben vagy egészben a Lazy loading című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.