Middle
Yaradıcılığa aid nümunələri adlandırın.
sobes.tech Süni İntellekt
AI-dan cavab
- Fabrika Metodu: İnterfeysi obyektlərin yaradılması üçün müəyyən edir, lakin hansı sinifin instansiya ediləcəyinə alt siniflər qərar verir.
// Fabrika interfeysi class Creator { factoryMethod() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } anOperation() { const product = this.factoryMethod(); return `Yaradan: eyni məntiq yeni ${product.operation()} ilə işləyirdi`; } } // Konkret fabrikanın ProductA yaradılması class ConcreteCreatorA extends Creator { factoryMethod() { return new ConcreteProductA(); } } // Məhsul interfeysi class Product { operation() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } } // ConcreteProductA class ConcreteProductA extends Product { operation() { return "ConcreteProductA nəticəsi"; } } // İstifadə const creator = new ConcreteCreatorA(); console.log(creator.anOperation()); - Mücərrəd Fabrika: Əlaqəli və ya asılı obyekt ailələrini yaratmaq üçün interfeys təmin edir, onların konkret siniflərini göstərmədən.
// Mücərrəd fabrikanın interfeysi class AbstractFactory { createProductA() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } createProductB() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } } // Konkret fabrikanın məhsulları üçün class ConcreteFactory1 extends AbstractFactory { createProductA() { return new ConcreteProductA1(); } createProductB() { return new ConcreteProductB1(); } } // Konkret fabrikanın məhsulları üçün class ConcreteFactory2 extends AbstractFactory { createProductA() { return new ConcreteProductA2(); } createProductB() { return new ConcreteProductB2(); } } // Məhsul interfeysləri class AbstractProductA { operationA() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } } class AbstractProductB { operationB() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } anotherOperationB(collaborator) { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } } // Konkret məhsullar Variant 1 class ConcreteProductA1 extends AbstractProductA { operationA() { return "ConcreteProductA1 nəticəsi"; } } class ConcreteProductB1 extends AbstractProductB { operationB() { return "ConcreteProductB1 nəticəsi"; } anotherOperationB(collaborator) { return `ConcreteProductB1 nəticəsi ${collaborator.operationA()} ilə birlikdə`; } } // Konkret məhsullar Variant 2 class ConcreteProductA2 extends AbstractProductA { operationA() { return "ConcreteProductA2 nəticəsi"; } } class ConcreteProductB2 extends AbstractProductB { operationB() { return "ConcreteProductB2 nəticəsi"; } anotherOperationB(collaborator) { return `ConcreteProductB2 nəticəsi ${collaborator.operationA()} ilə birlikdə`; } } // İstifadə function clientCode(factory) { const productA = factory.createProductA(); const productB = factory.createProductB(); console.log(productB.operationB()); console.log(productB.anotherOperationB(productA)); } console.log('Müştəri: Factory1 test edir...'); clientCode(new ConcreteFactory1()); console.log('Müştəri: Factory2 test edir...'); clientCode(new ConcreteFactory2()); - Tikintiçi (Builder): Çətin obyektləri mərhələli şəkildə yaratmağa imkan verir. Eyni inşaat prosesindən istifadə edərək obyektin müxtəlif təqdimatlarını əldə etməyə imkan verir.
// Tikintiçi interfeysi class Builder { producePartA() { } producePartB() { } producePartC() { } } // Konkret tikintiçi class ConcreteBuilder1 extends Builder { constructor() { super(); this.reset(); } reset() { this.product = new Product1(); } producePartA() { this.product.parts.push('PartA1'); } producePartB() { this.product.parts.push('PartB1'); } producePartC() { this.product.parts.push('PartC1'); } getProduct() { const result = this.product; this.reset(); return result; } } // Təqdim olunan məhsul class Product1 { constructor() { this.parts = []; } listParts() { console.log(`Məhsul hissələri: ${this.parts.join(', ')}`); } } // Direktor (isteğe bağlı, inşaat prosesini idarə edir) class Director { setBuilder(builder) { this.builder = builder; } buildMinimalViableProduct() { this.builder.producePartA(); } buildFullFeaturedProduct() { this.builder.producePartA(); this.builder.producePartB(); this.builder.producePartC(); } } // İstifadə const director = new Director(); const builder = new ConcreteBuilder1(); director.setBuilder(builder); console.log('Standart minimal məhsul:'); director.buildMinimalViableProduct(); builder.getProduct().listParts(); console.log('Standart tam məhsul:'); director.buildFullFeaturedProduct(); builder.getProduct().listParts(); console.log('İstifadəçi məhsulu:'); builder.producePartA(); builder.producePartC(); builder.getProduct().listParts(); - Prototip (Prototype): Mövcud obyektləri kopyalamağa imkan verir, onların həyata keçirilmə detalları ilə məşğul olmadan.
// Prototip interfeysi class Prototype { clone() { throw new Error("Metod alt siniflər tərəfindən həyata keçirilməlidir"); } } // Konkret prototip class ConcretePrototype1 extends Prototype { constructor(property) { super(); this.property = property; } clone() { const clone = new ConcretePrototype1(this.property); // Lazım gələrsə, digər xüsusiyyətlərin dərin kopyası əlavə edilə bilər return clone; } } // İstifadə const original = new ConcretePrototype1("dəyər"); const clone = original.clone(); console.log(`Orijinal property: ${original.property}`); console.log(`Klon property: ${clone.property}`); // Müqayisə, obyektlərin fərqli olub-olmadığını yoxlamaq console.log(`Fərqli obyektlər? ${original === clone}`); - Singleton: Bir sinifin yalnız bir nümunəsinin olmasını təmin edir və ona qlobal giriş nöqtəsi təqdim edir.
class Singleton { static instance; constructor() { if (Singleton.instance) { return Singleton.instance; } Singleton.instance = this; } someBusinessLogic() { // ... } } // İstifadə const s1 = new Singleton(); const s2 = new Singleton(); console.log(`Eyni nümunələr? ${s1 === s2}`);