Design Pattern’ler — Javascript
Selamlar! Bugünkü yazımda sizlere design patternlerden bahsedeceğim. Bu konuyu yeni öğrenmeye başladım, bu yüzden hem bilgimi pekiştirmek hem de yanlış anladığım noktalar varsa sizlerin yardımıyla düzeltmek istiyorum. Umarım hepimiz için faydalı olur. Yorum bırakmaktan çekinmeyin!
Design Pattern Nedir?
Yazılımda sıklıkla ortaya çıkan problemleri çözmek için kullanılan çözüm yöntemleridir. Bu yöntemler genellikle prensipleri ve rehberleri ifade eder. Spesifik bir kod bloğu değildir, kopyala yapıştır yaparak çözüm elde etmek için kullanılmaz. Bunun yerine uygulayabileceğimiz genel yaklaşımlar sunar. Örneğin java ve javascriptin yapıları birbirinden farklıdır bu yüzden aynı design pattern ile bir sorunu çözsek de adımlar birbirinden farklılık gösterebilir.
Design patternler katı kurallara sahip değildirler, ihtiyaca bağlı olarak özelleştirilebilirler. Yazılımcılar arasında ortak dil kullanımını sağlamaları da ekip çalışmaları için bir avantajdır.
Gang of Four(GoF) tarafından yazılan Design Patterns: Elements of Reusable Object-Oriented Software kitabıyla birlikte design patternler yaygınlaşmıştır. Bu kitapta 23 adet design patternden bahsedilmektedir. Javascript hem OOP özelliklerine sahip hem de geleneksel object oriented dillerden farklı yaklaşımlara sahip olduğu için ben design patternlerin Javascript ile kullanımlarını öğrenebileceğim bir kaynaktan ilerlemeyi tercih ettim.
İzlediğim kurs; JavaScript Design Patterns for Web Apps by Maximiliano Firtman
GoF’un kitabında Design Patternler 3 ana başlıkta toplanmaktadır. Bunlar:
- Creational Patterns
- Structural Patterns
- Behavioral Patterns
Bu yazımda Creational Patterns kategorisinde yer alan Singleton Pattern’den bahsedeceğim.
Singleton Pattern
Gerekçe: Bir class’a ait yalnızca bir instance oluşturulması ve bu instance'a global erişim sağlanmasının gerekli olduğu durumlar
Get Esra Akbulat’s stories in your inbox
Join Medium for free to get updates from this writer.
Örnek kod:
class Configuration {
static #instance = null; // Özel (private) bir statik alan
#settings = {
theme: "light",
language: "en",
};
constructor() {
if (Configuration.#instance) {
return Configuration.#instance;
}
Configuration.#instance = this;
}
getSetting(key) {
return this.#settings[key];
}
setSetting(key, value) {
this.#settings[key] = value;
}
}
// Kullanım:
const config1 = new Configuration();
console.log(config1.getSetting("theme")); // "light"
const config2 = new Configuration();
config2.setSetting("theme", "dark");
console.log(config1.getSetting("theme")); // "dark" (config1 ve config2 aynı instance)
console.log(config1 === config2); // trueSingleton Pattern’e ait örnek arattığınız zaman bu kod bloğuna benzer class ile yazılmış örneklerle karşılaşıyorsunuz. Daha basit düşünmek gerekirse javascriptte objeler ile de singleton patternini uygulayabiliriz.
Örnek kod — obje versiyonu:
const Configuration = {
settings: {
theme: "light",
language: "en",
},
getSetting(key) {
return this.settings[key];
},
setSetting(key, value) {
this.settings[key] = value;
}
};
// Kullanım:
const config1 = Configuration;
console.log(config1.getSetting("theme")); // "light"
const config2 = Configuration;
config2.setSetting("theme", "dark");
console.log(config1.getSetting("theme")); // "dark" (config1 ve config2 aynı instance)
console.log(config1 === config2); // trueconfig1 ve config2 aynı objeyi işaret ettiği için referans noktaları aynıdır ve bu objeye yapılan değişiklikler ikisini de etkiler.
Örnek Kullanım Alanları:
- Konfigürasyon Yönetimi: Uygulamanın genel ayarlarını merkezi bir yerden yönetmek
- Veritabanı Bağlantıları: Tek bir veritabanı bağlantısı sağlayarak kaynak kullanımını optimize etmek
- Logger (Kayıt) Yönetimi: Uygulama genelinde tekil bir kayıt sistemi kullanmak






