let TransportationServices = Object.freeze({ bike: 0, bus: 1, car: 2 }); class TransportationApp { constructor() { this.distance = 0; } setTravel(wayOfTransport) { switch(wayOfTransport) { case TransportationServices.bike: this.transport = new BikeStrategy(); break; case TransportationServices.bus: this.transport = new BusStrategy(); break; case TransportationServices.car: this.transport = new CarStrategy(); break; } } initTravel(distance) { this.distance = distance; this.transport.travel(this.distance); let amount = this.transport.amount(this.distance); return amount; } } class TransportationServiceStrategy { travel(distance) { } amount(distance) { } } class BikeStrategy extends TransportationServiceStrategy { travel(distance) { console.log(`Pedaleando para llegar en Bici ${distance} kms`); } amount(distance) { return 0;// gratis. } } class BusStrategy extends TransportationServiceStrategy { travel(distance) { console.log(`Viajando Economico en Bus ${distance} kms`); } amount(distance) { return 30; // precio fijo } } class CarStrategy extends TransportationServiceStrategy { travel(distance) { console.log(`Viajando Comodo en Carro ${distance} kms`); } amount(distance) { return 5 * distance; // precio por km. } } let transport = new TransportationApp(); // Bici transport.setTravel(TransportationServices.bike); let amountBike = transport.initTravel(20); console.log(`El costo fue de ${amountBike} usd`); // Pedaleando para llegar en Bici 20 kms // El costo fue de 0 usd // Bus transport.setTravel(TransportationServices.bus); let amountBus = transport.initTravel(20); console.log(`El costo fue de ${amountBus} usd`); // Viajando Economico en Bus 20 kms // El costo fue de 30 usd // Car transport.setTravel(TransportationServices.car); let amountCar = transport.initTravel(20); console.log(`El costo fue de ${amountCar} usd`); // Viajando Comodo en Carro 20 kms // El costo fue de 100 usd