Middle
Նշեք ստեղծող նմուշները։
sobes.tech AI
Պատասխան AI-ից
- Արտադրական մեթոդ (Factory Method): Հստակեցնում է օբյեկտների ստեղծման ինտերֆեյսը, բայց թույլ է տալիս ենթակլասներին որոշել, թե որ դասի ինստանցիա ստեղծել:
// Ֆաբրիկայի ինտերֆեյս class Creator { factoryMethod() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } anOperation() { const product = this.factoryMethod(); return `Creator: նույն տրամաբանությունը, որը վերջերս աշխատում էր ${product.operation()}`; } } // կոնկրետ ֆաբրիկա, որը ստեղծում է ProductA class ConcreteCreatorA extends Creator { factoryMethod() { return new ConcreteProductA(); } } // Օբյեկտի ինտերֆեյս class Product { operation() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } } // կոնկրետ արտադրանք, որը ստեղծվում է ConcreteCreatorA-ով class ConcreteProductA extends Product { operation() { return "Արդյունք ConcreteProductA"; } } // Օգտագործում const creator = new ConcreteCreatorA(); console.log(creator.anOperation()); - Աբստրակտ գործարան (Abstract Factory): Պահպանում է ինտերֆեյս՝ կապված կամ կախված օբյեկտների ընտանիքների ստեղծման համար, առանց նրանց կոնկրետ դասերը նշելու:
// Աբստրակտ գործարանի ինտերֆեյս class AbstractFactory { createProductA() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } createProductB() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } } // կոնկրետ ֆաբրիկա, որը ստեղծում է տարբերակ 1-ի արտադրանք class ConcreteFactory1 extends AbstractFactory { createProductA() { return new ConcreteProductA1(); } createProductB() { return new ConcreteProductB1(); } } // կոնկրետ ֆաբրիկա, որը ստեղծում է տարբերակ 2-ի արտադրանք class ConcreteFactory2 extends AbstractFactory { createProductA() { return new ConcreteProductA2(); } createProductB() { return new ConcreteProductB2(); } } // Ապրանքների ինտերֆեյսներ class AbstractProductA { operationA() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } } class AbstractProductB { operationB() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } anotherOperationB(collaborator) { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } } // կոնկրետ արտադրանք տարբերակ 1 class ConcreteProductA1 extends AbstractProductA { operationA() { return "Արդյունք ConcreteProductA1"; } } class ConcreteProductB1 extends AbstractProductB { operationB() { return "Արդյունք ConcreteProductB1"; } anotherOperationB(collaborator) { return `Արդյունք ConcreteProductB1 համագործակցելով ${collaborator.operationA()}`; } } // կոնկրետ արտադրանք տարբերակ 2 class ConcreteProductA2 extends AbstractProductA { operationA() { return "Արդյունք ConcreteProductA2"; } } class ConcreteProductB2 extends AbstractProductB { operationB() { return "Արդյունք ConcreteProductB2"; } anotherOperationB(collaborator) { return `Արդյունք ConcreteProductB2 համագործակցելով ${collaborator.operationA()}`; } } // Օգտագործում function clientCode(factory) { const productA = factory.createProductA(); const productB = factory.createProductB(); console.log(productB.operationB()); console.log(productB.anotherOperationB(productA)); } console.log('Հաճախորդ: Factory1-ի փորձարկում...'); clientCode(new ConcreteFactory1()); console.log('Հաճախորդ: Factory2-ի փորձարկում...'); clientCode(new ConcreteFactory2()); - Կառուցապատող (Builder): Позволяет создавать сложные объекты пошагово. Обеспечивает возможность использовать один и тот же процесс строительства для получения различных представлений объекта.
// Կառուցապատողի ինտերֆեյս class Builder { producePartA() { } producePartB() { } producePartC() { } } // կոնկրետ կառուցապատող 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; } } // ներկայացվող արտադրանքը class Product1 { constructor() { this.parts = []; } listParts() { console.log(`Ապրանքի մասեր: ${this.parts.join(', ')}`); } } // ռեժիսոր (ոչ պարտադիր, կառավարում կառուցման գործընթացը) class Director { setBuilder(builder) { this.builder = builder; } buildMinimalViableProduct() { this.builder.producePartA(); } buildFullFeaturedProduct() { this.builder.producePartA(); this.builder.producePartB(); this.builder.producePartC(); } } // Օգտագործում const director = new Director(); const builder = new ConcreteBuilder1(); director.setBuilder(builder); console.log('Ստանդարտ նվազագույն արտադրանք:'); director.buildMinimalViableProduct(); builder.getProduct().listParts(); console.log('Ստանդարտ լրիվ արտադրանք:'); director.buildFullFeaturedProduct(); builder.getProduct().listParts(); console.log('Հաճախորդի արտադրանքը:'); builder.producePartA(); builder.producePartC(); builder.getProduct().listParts(); - Պրոտոտիպ (Prototype): Позволяет копировать существующие объекты, не вдаваясь в подробности их реализации.
// Պրոտոտիպի ինտերֆեյս class Prototype { clone() { throw new Error("Մեթոդը պետք է իրականացվի ենթակլասներում"); } } // կոնկրետ պրոտոտիպ class ConcretePrototype1 extends Prototype { constructor(property) { super(); this.property = property; } clone() { const clone = new ConcretePrototype1(this.property); // Կարող է ավելացնել խորքային պատճենում այլ հատկություններ, եթե անհրաժեշտ է return clone; } } // Օգտագործում const original = new ConcretePrototype1("արժեք"); const clone = original.clone(); console.log(`Օրիգինալ property: ${original.property}`); console.log(`Կոպիա property: ${clone.property}`); // Ստուգում, որ դա տարբեր օբյեկտներ են console.log(`Նույն օբյեկտները? ${original === clone}`); - Միայնակ (Singleton): Համոզված է, որ դասի միայն մեկ օրինակ կա, և տրամադրում է դեպի այդ գլոբալ մուտք:
class Singleton { static instance; constructor() { if (Singleton.instance) { return Singleton.instance; } Singleton.instance = this; } someBusinessLogic() { // ... } } // Օգտագործում const s1 = new Singleton(); const s2 = new Singleton(); console.log(`Նույն օրինակները? ${s1 === s2}`);