JavaScript 策略模式

255 阅读1分钟

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

看起来很懵哈,大概意思应该是,我打算去做一件事情,然后定制了A计划、B计划、C计划,每一个计划都是一种策略

class Commute {
    constructor(vehicle) {
        this.vehicle = vehicle
    }
    
    setOut(distance) {
        console.log(this.vehicle.move(distance)) 
    }
}

class Vehicle {
    constructor(money, speed) {
        this.money = money
        this.speed = speed
    }
}

class Bicycle extends Vehicle {
    constructor(money, speed) {
        super(money, speed)
    }
    
    move(distance) {
        const time = distance / this.speed
        return `耗时${time}分钟,花费${this.money}`
    }
}

class ElectricBicycle extends Vehicle {
    constructor(money, speed) {
        super(money, speed)
    }
    
    move(distance) {
        const time = distance / this.speed
        return `耗时${time}分钟,花费${ (parseInt(time / 5) * this.money) + this.money }`
    }
}

const commuteBicycle = new Commute(new Bicycle(2, 10))
const commuteElectricBicycle = new Commute(new ElectricBicycle(2, 20))

commuteBicycle.setOut(100)
commuteElectricBicycle.setOut(100)