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
A 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ó
Lusta 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
A 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
A 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ó
Az é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
- ↑ Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2003, pp.200-214. ISBN 0-321-12742-0.
Fordítás
Ez 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.