A következő szorgalmi feladatban az erőforrásszűkében gyakran használt ObjectPool mintát fogjuk megvalósítani. Bár a minta általánosságban használható, illetve több nyelv alatt is elérhető valamilyen speciális változata (látsd: ThreadPool, ConnectionPool), mi ezek megvalósítására nem törekszünk, csak String-ek kezelésére fogjuk használni.
A minta alkalmazására olyan esetben lehet szükség, ha viszonylag gyorsan, sok objektum keletkezik és szűnik meg. Ezek az objektumok létrehozása és felszabadítása pedig lassú is. Az objektumok tekinthetőek bizonyos erőforrásoknak is, amik szűk keresztmetszettel érhetők csak el.
Általában ezek a következő alap fügvényekkel rendelkeznek:
- Resource& acquire(): Azon erőforrásokból, amik szabadok a csoportban visszaad egy referenciát és innentől az adott erőforrás foglaltnak minősül.
- void release(Resource&): A kliens (hívó fél) visszaadja az objektumot, így az szabaddá válik.
- Konstruktor, amivel az erőforráscsoport (pool) méretét lehet megadni
Ugyanakkor a hagyományos "pooling" mintát kiterjesztjük további funkciókkal a String-ek kezelésére szabva:
- A konstruktorral nemcsak a pool-ban lévő string objektumok számát megadni, hanem azok kezdő méretét (mekkora legyen a karaktertömb) is.
- Egy string objektum elkérésekor megadható, hogy minimum mekkorának kell lennie a karaktertömb kapacitásának (ez nem a string hossza).