Pula obiektów

Pula obiektów (object pool) to wzorzec projektowy należący do grupy wzorców kreacyjnych. Jego głównym zadaniem jest przechowywanie puli zainicjalizowanych obiektów. Takie działanie ma na celu zapobiegnięciu sytuacji gdy potrzebne jest częste tworzenie obiektów których czas inicjalizacji jest kosztowny. Pobranie obiektu z puli powoduje blokadę dostępu aż do wywołania procesu zwalniającego.

Przykład zastosowania wzorca puli obiektów

Przykład klasy zarządzanej przez pulę obiektów:

  1. public class PoolItem {
  2.     private boolean inUse = false;
  3.     private Object item;
  4.     PoolItem(Object item) {
  5.         this.item = item;
  6.     }
  7.     public Object getItem() {
  8.         return item;
  9.     }
  10.     public boolean isInUse() {
  11.         return inUse;
  12.     }
  13.     public void setInUse(boolean inUse) {
  14.         this.inUse = inUse;
  15.     }
  16.     @Override
  17.     public boolean equals(Object obj) {
  18.         if ((obj != null) && (obj instanceof PoolItem)) {
  19.             PoolItem poolItem = (PoolItem) obj;
  20.             return poolItem.getItem().equals(this.getItem());
  21.         } else {
  22.             return false;
  23.         }
  24.     }
  25.     @Override
  26.     public int hashCode() {
  27.         int hash = 7;
  28.         hash = 53 * hash + (this.item != null ? this.item.hashCode() : 0);
  29.         return hash;
  30.     }
  31. }

Implementacja puli obiektów:

  1. public class Pool {
  2.     private List items = new ArrayList();
  3.     public void add(Object obj) {
  4.         System.out.println("Dodano: " + obj);
  5.         items.add(new PoolItem(obj));
  6.     }
  7.     public Object acquire() {
  8.         Object item = null;
  9.         for (PoolItem poolItem : items) {
  10.             if (poolItem.isInUse() == false) {
  11.                 poolItem.setInUse(true);
  12.                 item = poolItem.getItem();
  13.                 break;
  14.             }
  15.         }
  16.         System.out.println("Pobrano: " + item);
  17.         return item;
  18.     }
  19.     public void release(Object someObject) {
  20.         int index = items.indexOf(new PoolItem(someObject));
  21.         if (index != -1) {
  22.             PoolItem poolItem = items.get(index);
  23.             poolItem.setInUse(false);
  24.             System.out.println("Zwolniono: " + poolItem.getItem());
  25.         }
  26.     }
  27. }

Przykład użycia puli obiektów:

  1. public class Main {
  2.     public static void main(String[] arg) {
  3.         Pool pool = new Pool();
  4.         for (int i = 0; i < 2; i++) {
  5.             pool.add("Obiekt" + i);
  6.         }
  7.         String someString1 = (String) pool.acquire();
  8.         String someString2 = (String) pool.acquire();
  9.         String someString3 = (String) pool.acquire();
  10.         pool.release(someString1);
  11.         String someString4 = (String) pool.acquire();
  12.     }
  13. }

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.