Leniwa inicializacja (lazy initialization) jest to wzorzec projektowy należący do grupy wzorców kreacyjnych. Polega on na zmianie taktyki tworzenia obiektów, przeliczania kosztownych operacji. Taktyka ta polega na opóźnieniu tych procesów do momentu aż będą one naprawdę potrzebne.
Implementacja tego wzorca polega na stworzeniu flagi, na podstawie której można określić czy dany obiekt został już stworzony. Każdorazowe probiernie obiektu równoznaczne jest ze sprawdzeniem stanu tej flagi.
Przykład zastosowania wzorca leniwej inicializacji
public class Product {
}
public class LazySeller {
private Deque products = new ArrayDeque();
public Product sellProduct() {
Product product = products.pollFirst();
if (product == null) {
System.out.println("Brak produktów na magazynie.");
products.addAll(orderProducts(4));
product = products.pollFirst();
}
System.out.println("Sprzedano produkt");
return product;
}
private Deque orderProducts(int amount) {
System.out.println("Zamówiono "+amount+" produkty");
Deque orderedProducts = new ArrayDeque();
for (int i = 0; i < amount; i++) {
orderedProducts.add(new Product());
}
return orderedProducts;
}
}
Klasa testująca obiekt LazySeller.
public class Customer {
public static void main(String [] arg) {
LazySeller lazySeller = new LazySeller();
Product product = null;
product = lazySeller.sellProduct();
product = lazySeller.sellProduct();
product = lazySeller.sellProduct();
product = lazySeller.sellProduct();
product = lazySeller.sellProduct();
}
}
Wynik działania programu:
Brak produktów na magazynie.
Zamówiono 4 produkty
Sprzedano produkt
Sprzedano produkt
Sprzedano produkt
Sprzedano produkt
Brak produktów na magazynie.
Zamówiono 4 produkty
Sprzedano produkt
Komentarze
Dodaj nowy komentarz