Leniwa inicializacja

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

  1. public class Product {
  2. }
  3. public class LazySeller {
  4.     private Deque  products = new ArrayDeque();
  5.     public Product sellProduct() {
  6.         Product product = products.pollFirst();
  7.         if (product == null) {
  8.             System.out.println("Brak produktów na magazynie.");
  9.             products.addAll(orderProducts(4));
  10.             product = products.pollFirst();
  11.         }
  12.         System.out.println("Sprzedano produkt");
  13.         return product;
  14.     }
  15.     private Deque  orderProducts(int amount) {
  16.         System.out.println("Zamówiono "+amount+" produkty");
  17.         Deque  orderedProducts = new ArrayDeque();
  18.         for (int i = 0; i < amount; i++) {
  19.             orderedProducts.add(new Product());
  20.         }
  21.         return orderedProducts;
  22.     }
  23. }

Klasa testująca obiekt LazySeller.

  1. public class Customer {
  2.     public static void main(String [] arg) {
  3.         LazySeller lazySeller = new LazySeller();
  4.         Product product = null;
  5.         product = lazySeller.sellProduct();
  6.         product = lazySeller.sellProduct();
  7.         product = lazySeller.sellProduct();
  8.         product = lazySeller.sellProduct();
  9.         product = lazySeller.sellProduct();
  10.     }
  11. }
Wynik działania programu:
  1. Brak produktów na magazynie.
  2. Zamówiono 4 produkty
  3. Sprzedano produkt
  4. Sprzedano produkt
  5. Sprzedano produkt
  6. Sprzedano produkt
  7. Brak produktów na magazynie.
  8. Zamówiono 4 produkty
  9. Sprzedano produkt

Komentarze

Dodaj nowy komentarz

  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

CAPTCHA
Jakie znaki widnieją na obrazku?
Image CAPTCHA
Przepisz ciąg znaków z obrazka.