Singleton Design Pattern nədir?

Singleton Design Pattern nədir(nümunələrlə)?

Singleton proqramda obyektin yalnızca bir dəfə yaradılmasını təmin edən və digər bütün kodlar üçün vahid əlçatanlıq yaradan Design Patterndir. Singleton Pattern Creational Pattern qrupuna aiddir və ən çox istifadə olunan Patternlərdən hesab olunur. Aşağıdakı nümunəyə baxaq:

Fərz edək ki, gələn istəklərə cavab verən bir proqram yazmışıq. Bizə hər dəfə istək gəldikdə eyni obyekti hər dəfə yaradırıq. Halbuki bizə sadecə bir dəfə proqram işə düşdükdə yaranması bəs edir. Bilirik ki, təyin etdiyimiz hər obyekt yaddaşda müəyyən yer tutur və belə olduğu hal bizim işimizi olduqca çətinləşdirir. Bunun üçün biz Singleton Pattern istifadə edərək obyekti yalnızca bir dəfə yaradırıq. Daha yaxşı başa düşmək üçün aşağıdakı kod nümunəsinə baxaq.

Biz verilənlər bazası ilə əlaqa qurmaq üçün Db structımızı yaradırıq. Ardınca həmən structın bir nümunəsini DbInstance-a mənimsədirik və ConnectDb funksiyamızı yazırıq. Bu funksiya hər dəfə çağırıldıqda DbInstance nümunəsinin var olub olmadığını yoxlayacaq. Əgər varsa bu zaman cari DbInstance-ı, digər halda isə yeni DbInstance yaradaraq bizə verəcək. Kodu işə salaraq aşağıdakı nəticəni almış olarıq.

Ancaq biz bilirik ki, go proqramlaşdırma dili multi thread-dir. Bunu kodumuza tətbiq edək.

Kodumuzu işə salaraq aşağıdakı nəticəni alarıq.

Biz birdən çox goroutine işə saldıqda, bu zaman eyni anda if DbInstance == nil ifadəsinə müraciət olunur və race condition yaranır. Yəniki bu əməliyyatlar bir-birini gözləmir. Ona görədə birdən çox Instance yaradılır. Bunun qarşısını almaq üçün sync.Mutex istifadə olunur.

Bu zaman ilk goroutine işə düşəcək və mutex.Lock()-u gördüyü zaman artıq digər goroutinlər üçün bu əlçatan olmayacaq. İlk goroutine işini gördükdən sonra ən sonda mutex.Unlock()-u oxuyacaq və digər goroutine-lər üçün bu funksiyanını əlçatan edəcəkdir.

Artıq istədiyimiz nəticəni alırıq. Ancaq kod bir dəfə işləyib Instance aldıqdan sonra hər dəfə müraciət etdikdə mutex.Lock() funksiyası yenidən işləyəcək. Bu funksiyanın hər dəfə işləməsi bizim üçün yaxşı hal hesab olunmur. Çünki bu proses kompüter üçün bahalı proses hesab olunur. Kodu aşağıdakı kimi yaza bilərik.

Yazdığım kod nümunəsinə buradan baxa bilərsiz.

Beləliklə, biz Singleton Design Pattern-in nə olduğunu öyrəndik. Növbəti məqalədə görüşmək ümidi ilə.