Object Pool (Nesne Havuzu) Tasarım Deseni

Object pool,  dağıtık sistemlerde veya yazılım geliştirici tarafından yönetilmesi zor olan nesnelerde  kullanılabilecek bir tasarım desenidir. Creational (Yaratıcı, nesnelerin oluşturulmasına yönelik) desenler içerisinde yer almaktadır. İstenilen nesnelerin sürekli olarak üretilmesi yerine,  başlangıçta bir havuzu oluşturulur ve bu havuz nesneler ile doldurulur.

Bir örnekle somutlaştıralım; Bir kiralık eve ihtiyacınız olduğunu varsayalım, bu durumda en kolay çözüm size kiralık ev bulabilecek bir emlakçıya gidersiniz. Emlakçı daha önceden bir müşterinin ihtiyacı olabileceğini düşünerek elinde kiralık evleri bulundurur, siz gelip bir ev istediğinizde elindeki evlere göz atarak isteğinize uygun bir ev verir, elinde kullanıma uygun bir ev yok ise boşaltabileceği evlere göz atar (ihtiyaç/önem sırası öncelik oluşturabilir) eğer bulursa size evi verir, bulamadığı durumlarda ise size belirli bir süre beklemenizi söyleyebilir.

Bu örnek object pool tasarım deseninin uygulanmasına uygun bir örnek teşkil edebilir. Şimdi object pool tasarım deseni uygulanmadığını varsayarak senaryomuza tekrar dönelim, bu sayede nerelerde kullanmanız gerektiğini kavramış olacaksınız.

Kiralık ev ihtiyacınız olduğunu varsayalım, tasarım desenimiz olmadığı için ilk yapacağınız şey hemen kendinize bir ev inşa etmeye başlarsınız çünkü bir eve ihtiyacınız var ve bu ihtiyacınızı karşılamak için kendi evinizi yapmaya başladınız. Ev ihtiyacınızı emlakçıya belirttiğinizi varsayalım bu durumda emlakçı kiralık ev arayan herkes için ev yapmaya başlayacaktı.

Eve ihtiyaç duyan herkes sizin gibi düşüneceği için bu ihtiyaçların karşılanması uzun soluklu ve maliyetli bir iş olacaktı. Tasarım desenimiz uygulandığında daha önce inşa edilen evler, istemcilerin ihtiyaçları doğrultusunda dönüşümlü olarak kullanılmaktadır, ihtiyacın artması halinde bu durum göz önüne alınarak yeni evler inşa edilir ve emlakçıya verilir. Bu örnekte, ürünü talep eden yani client (istemci) siz, nesnemiz yani talep edilen product (ürün) ev, objcet pool (nesne havuzu) ise emlakçıdır.

Bu tasarım deseninde object pool sınıfına singleton tasarım deseni uygulanır. Singleton tasarım deseni, uygulanan nesnenin bellekte tek bir kopyasının olmasını, istenildiği durumlarda aynı instance gönderilmesini sağlar. Bu tasarım desenini objcet pool sınıfına uygulayarak, nesne havuzunun tek bir kopyasının olmasını sağlıyoruz.

Object Pool UML Diagram
object_pool_uml

ObjectPool: Bu sınıf içerisinde 2 adet object listesi barındırır. Bu listeler uygulanacak olan nesnelerin şu anda kullanılan ve kullanılabilir durumda olanlarını barındırır.

NesneVer() metodu çağrıldığında geri dönüş tipi olarak uygulanan nesne olan bir değer döndürür, bu nesne kullanılabilir object listesinden alınır ve şu anda kullanılanlar listesine taşınarak istemciye gönderilir. Bu noktada kullanılanlar listesi yerine nesne içerisine eklenecek ek bir bool tipinde available adında property ile de yönetilebilir. Bu sayede kullanılan nesnelerin bu özelliği false olarak atanır.

SerberstBirak() metodu object tipindeki ürünü parametre olarak alır ve kullanılabilir nesnesi listesine atar, veya available özelliğini true olarak değiştirerek nesneyi temizler.

Object: Bu sınıf ise tasarım desenini uygulayacağımız nesneyi ifade etmektedir.

Client: Object nesnesini havuzdan talep eden geliştirici veya kullanıcıdır.