Sitemap
Esra Akbulat

Esra Akbulat

Frontend Developer

Design Pattern’ler — Javascript

3 min readAug 30, 2024

--

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!

Resimde bir buton ve ona basmak üzere olan el var. Resmin üstünde ingilizce daha iyi kod yazmak istiyorum yazıyor. Butonun üstünde “design patterns” yazıyor

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); // true

Singleton 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); // true

config1 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
Batman’in tokat attığı meme. Tokat atılan kişi yeni bir instance oluşturmak istediğini söylemeye çalışıyor. Batman sadece bir tane olabilir diyor.

--

--