Hansı dizayn nümunələrini praktiki olaraq istifadə etdiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Təcrübədə aşağıdakı dizayn nümunələrini tətbiq etdim:
-
Fabrika Metodu (Factory Method): Müxtəlif növ obyektlərin yaradılması üçün, konkret sinfi göstərmədən. Məlumat mənbələri və ya konfiqurasiyalar ilə işləyərkən əlverişlidir.
// Fabrika metodunun istifadəsi nümunəsi class DataReader { read() { throw new Error("Metod tətbiq olunmayıb"); } } class FileReader extends DataReader { read() { console.log("Fayldan məlumat oxuyur..."); } } class NetworkReader extends DataReader { read() { console.log("Şəbəkədən məlumat oxuyur..."); } } class DataReaderFactory { createReader(type) { switch (type) { case "file": return new FileReader(); case "network": return new NetworkReader(); default: throw new Error("Naməlum oxuyucu tipi"); } } } const factory = new DataReaderFactory(); const fileReader = factory.createReader("file"); fileReader.read(); -
Singleton (Tək): Yalnız bir nümunənin mövcudluğunu təmin edir və ona qlobal giriş imkanı verir. Çox vaxt konfiqurasiya menecerləri və ya verilənlər bazası bağlantıları üçün istifadə olunur.
// Singleton nümunəsi class ConfigManager { constructor() { if (ConfigManager.instance) { return ConfigManager.instance; } this.config = {}; ConfigManager.instance = this; } setConfig(key, value) { this.config[key] = value; } getConfig(key) { return this.config[key]; } } const instance1 = new ConfigManager(); const instance2 = new ConfigManager(); console.log(instance1 === instance2); // true -
Gözətçi (Observer): "bir-çox" əlaqəsini həyata keçirmək üçün, burada bir obyektin (yayımçı) vəziyyəti dəyişdikdə, avtomatik olaraq bütün asılı obyektlər (abonentlər) xəbərdar edilir. Bildiriş sistemləri, reaktiv interfeyslər üçün istifadə olunur.
// Gözətçi nümunəsi class Observable { constructor() { this.observers = []; } subscribe(observer) { this.observers.push(observer); } unsubscribe(observer) { this.observers = this.observers.filter(obs => obs !== observer); } notify(data) { this.observers.forEach(observer => observer.update(data)); } } class Observer { update(data) { console.log("Yeniləmə alındı:", data); } } const observable = new Observable(); const observer1 = new Observer(); const observer2 = new Observer(); observable.subscribe(observer1); observable.subscribe(observer2); observable.notify("Yeni məlumat mövcuddur!"); -
Strateji (Strategy): Alqoritmlər ailəsini müəyyən etmək, hər birini inkapsulyasiya etmək və onların yerini dəyişdirmək. Bu, alqoritmi müştərilərdən müstəqil dəyişdirməyə imkan verir. Məlumatların emalı və ya əməliyyatların yerinə yetirilməsi üçün müxtəlif variantlar.
// Stratejinin istifadəsi nümunəsi class PaymentStrategy { pay(amount) { throw new Error("Metod tətbiq olunmayıb"); } } class CreditCardPayment extends PaymentStrategy { pay(amount) { console.log(`${amount} ödənişi Kredit Kart ilə`); } } class PayPalPayment extends PaymentStrategy { pay(amount) { console.log(`${amount} ödənişi PayPal ilə`); } } class PaymentContext { setStrategy(strategy) { this.strategy = strategy; } executePayment(amount) { this.strategy.pay(amount); } } const context = new PaymentContext(); context.setStrategy(new CreditCardPayment()); context.executePayment(100); context.setStrategy(new PayPalPayment()); context.executePayment(50); -
Dekorator (Decorator): Obyektə dinamik olaraq yeni funksionallıq əlavə etmək üçün, onun strukturunu dəyişmədən. Mövcud obyekti əhatə edir, ona eyni interfeysi təmin edir, lakin əlavə funksionallıq ilə. Loglama, validasiya, keşik üçün əlverişlidir.
// Dekorator nümunəsi class Component { operation() { return "Əsas komponent"; } } class Decorator { constructor(component) { this.component = component; } operation() { return this.component.operation(); } } class ConcreteDecoratorA extends Decorator { operation() { return `ConcreteDecoratorA(${super.operation()})`; } } class ConcreteDecoratorB extends Decorator { operation() { return `ConcreteDecoratorB(${super.operation()})`; } } const simple = new Component(); console.log(simple.operation()); const decoratorA = new ConcreteDecoratorA(simple); console.log(decoratorA.operation()); const decoratorB = new ConcreteDecoratorB(decoratorA); console.log(decoratorB.operation()); -
Modul (Modul): Node.js-də modul sistemi (CommonJS, ES Modules) daxili olsa da, JavaScriptdə Module pattern (təbii modulların yaranmasından əvvəl) gizli üzvlər və ictimai interfeys yaratmaq üçün istifadə olunurdu. Bu, kodun inkapsulyasiyası üçün əsasdır.
Bu nümunələr mənə daha strukturlaşdırılmış, genişlənə bilən və saxlanması asan kod yaratmağa kömək etdi.