Deo zbornika Uvod u softversko inženjerstvo

Bazen objekata

Bazen objekata (object pool) je projektni obrazac koji omogućava ponovnu upotrebu objekata iz skupa u kom se čuvaju, umesto da se objekti stalno kreiraju i uništavaju. Obično se koristi kada je skupo i neefikasno stalno kreirati i uništavati objekte, potrebne samo za kraći vremenski period (npr. neprijatelji u igrici i slično).

U osnovi, bazen objekata je kontejner koji sadrži određeni broj objekata. Kada klijent preuzme objekat iz kontejnera, taj objekat više neće biti dostupan drugim klijentima dok se ne vrati nazad. Objekti u bazenu imaju svoj životni ciklus: kreiranje, validacija i uništavanje. Bazen objekata obezbeđuje keš memoriju za instancirane objekte i prati koji se trenutno koriste, i koji su na raspolaganju.

Primer

Evo jednostavnog primera Object Pool obrasca u JavaScript-u:

class ObjectPool {
  constructor(createObj, maxSize = 10) {
    this.createObj = createObj
    this.maxSize = maxSize
    this.pool = []
  }

  borrowObject() {
    if (this.pool.length > 0)
      return this.pool.pop()  // vraća objekat iz pool-a
    return this.createObj()   // ako nema, stvara novi objekat
  }

  returnObject(obj) {
    if (this.pool.length < this.maxSize)
      this.pool.push(obj)
  }
}

// kvazi-funkcija za kreiranje objekta
const createObject = () => ({ id: Math.random(), status: 'active' })

// kreiramo pool sa maksimalno 5 objekata
const pool = new ObjectPool(createObject, 5)

// uzimanje objekta iz pool-a
const pooledObject = pool.borrowObject()

// vraćanje objekta u pool
pool.returnObject(pooledObject)

Literatura

  • Angelina Njeguš, Obrasci projektovanja softvera, Univerzitet Singidunum, Beograd, 2023.