You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
classDiscountFactory{staticcreateDiscount(discountType){switch(discountType){case'10%':
returnnewTenPercentDiscount();case'20%':
returnnewTwentyPercentDiscount();case'30%':
returnnewThirtyPercentDiscount();default:
thrownewError('Invalid discount type.');}}}classTenPercentDiscount{applyDiscount(price){returnprice-(price*0.1);}}classTwentyPercentDiscount{applyDiscount(price){returnprice-(price*0.2);}}classThirtyPercentDiscount{applyDiscount(price){returnprice-(price*0.3);}}// Usoconstdiscount=DiscountFactory.createDiscount('10%');constprice=100;constfinalPrice=discount.applyDiscount(price);console.log(`Precio original: ${price}, Precio final con descuento: ${finalPrice}`);
classCar{constructor(make,model){this.make=make;this.model=model;}}classCarFactory{createCar(make,model){returnnewCar(make,model);}}constfactory=newCarFactory();constmyCar=factory.createCar('Honda','Civic');console.log(myCar);// Output: Car { make: 'Honda', model: 'Civic' }
Singleton
classDatabaseConnection{constructor(){if(!DatabaseConnection.instance){// Lógica de conexión a la base de datosDatabaseConnection.instance=this;}returnDatabaseConnection.instance;}query(query){// Lógica de consulta a la base de datos}}// Usoconstconnection1=newDatabaseConnection();constconnection2=newDatabaseConnection();console.log(connection1===connection2);// true, son la misma instancia
// Adaptador para convertir el objeto de producto de la API en un objeto de producto de MongoDBclassProductMongoDBAdapter{constructor(product){this._product=product;}getid(){returnthis._product.id;}getname(){returnthis._product.name;}getdescription(){returnthis._product.description;}getprice(){returnthis._product.price;}getimage(){returnthis._product.image;}// Convierte el objeto de producto adaptado en un documento de MongoDBtoMongoDocument(){return{_id: this._product.id,name: this._product.name,description: this._product.description,price: this._product.price,image: this._product.image,};}}// Controlador para obtener los detalles de un productoasyncfunctiongetProduct(req,res){constproductId=req.params.productId;constproductApi=awaitgetProductFromApi(productId);// Crea un adaptador para el objeto de producto de la APIconstproductMongoDBAdapter=newProductMongoDBAdapter(productApi);// Convierte el objeto de producto adaptado en un documento de MongoDBconstproductMongoDBDocument=productMongoDBAdapter.toMongoDocument();// Busca el documento de MongoDB en la base de datos y devuelve los detalles del productoconstproductMongoDB=awaitProductModel.findById(productMongoDBDocument._id);res.json(productMongoDB);}
Bridge
// Clase abstracta AuthProviderclassAuthProvider{constructor(strategy){this.strategy=strategy;}authenticate(req,res,next){this.strategy.authenticate(req,res,next);}}// Implementación de la estrategia para GoogleclassGoogleAuthStrategy{authenticate(req,res,next){// Lógica de autenticación de Google// ...next();}}// Implementación de la estrategia para FacebookclassFacebookAuthStrategy{authenticate(req,res,next){// Lógica de autenticación de Facebook// ...next();}}// Implementación de la estrategia para TwitterclassTwitterAuthStrategy{authenticate(req,res,next){// Lógica de autenticación de Twitter// ...next();}}// Ejemplo de uso en Expressapp.post('/auth/google',newAuthProvider(newGoogleAuthStrategy()).authenticate);app.post('/auth/facebook',newAuthProvider(newFacebookAuthStrategy()).authenticate);app.post('/auth/twitter',newAuthProvider(newTwitterAuthStrategy()).authenticate);
constEventEmitter=require('events');// Define una clase Subject que hereda de EventEmitterclassSubjectextendsEventEmitter{constructor(){super();this.data=null;}setData(data){this.data=data;// Emitir un evento 'data-updated' cuando se actualiza la datathis.emit('data-updated',data);}getData(){returnthis.data;}}// Define una clase Observer que escucha el evento emitido por SubjectclassObserver{constructor(subject){this.subject=subject;this.subject.on('data-updated',this.onDataUpdated.bind(this));}onDataUpdated(data){console.log(`Data actualizada: ${data}`);}}// Ejemplo de usoconstsubject=newSubject();constobserver=newObserver(subject);subject.setData('nueva data');// salida esperada: 'Data actualizada: nueva data'
Chain of Responsibility
// Define una función que verifica si una petición es de un tipo específicofunctionisOfType(req,type){returnreq.method===type;}// Define un middleware que maneja peticiones GETfunctionhandleGet(req,res,next){if(isOfType(req,'GET')){console.log('Manejando una petición GET');res.send('Petición GET manejada');}else{next();}}// Define un middleware que maneja peticiones POSTfunctionhandlePost(req,res,next){if(isOfType(req,'POST')){console.log('Manejando una petición POST');res.send('Petición POST manejada');}else{next();}}// Define un middleware que maneja peticiones PUTfunctionhandlePut(req,res,next){if(isOfType(req,'PUT')){console.log('Manejando una petición PUT');res.send('Petición PUT manejada');}else{next();}}// Define un middleware que maneja peticiones DELETEfunctionhandleDelete(req,res,next){if(isOfType(req,'DELETE')){console.log('Manejando una petición DELETE');res.send('Petición DELETE manejada');}else{next();}}// Define una cadena de middlewares para manejar diferentes tipos de peticionesconstrequestHandlerChain=[handleGet,handlePost,handlePut,handleDelete];// Registra los middlewares en una ruta específicaapp.use('/api',requestHandlerChain);