设计原则 练习2

第二题
某停车场,分三层,每层100车位
每个车位都能监控到车辆的驶入和离开
车辆进入前,显示每层的空余车辆数量
车辆进入时,摄像头可识别车牌号和时间
车辆出来时,出口显示器显示车牌号和停车时长

题目:画出UML类图

代码

// 车辆
class Car{
    constructor(number) {
        this.number = number;
    }
}

// 摄像头
class Camera {
    shot(car) {
        return {
            num: car.num,
            inTime: Date.now()
        }
    }
}

// 出口显示屏
class Screen {
    show(car, inTime) {
        console.log('车牌号:', car.num);
        console.log('停车时间:', Date.now = inTime)
    }
}

// 停车场
class Park {
    constructor(floors) {
        this.floors = floors || []
        this.camera = new Camera();
        this.screen = new Screen();
        this.carList = {} // 存储摄像头拍摄返回的信息
    }
    in(car) {
        // 通过摄像头获取信息
        const info = this.camera.shot(car);
        // 停到某个停车位
        const i = parseInt(Math.random() * 100 % 100);
        const place = this.floors[0].places[i];
        place.in();
        info.place = place;
        //记录信息
        this.carList[car.num] = info;
    }
    out(car) {
        // 获取信息
        const info = this.carList[car.num];
        // 将停车位清空
        const place = info.place;
        place.out();
        // 显示时间
        this.screen.show(car, info.inTime);
        // 清空记录
        delete this.carList[car.num]
    }
    emptyNum() {
        return this.floors.map(floor => {
            return `${floor.index}层还有${floor.emptyPlaceNum()}个空闲车位`
        }).join('
')
    }
}

class Floor {
    constructor(index, places) {
        this.index = index;
        this.places = places || []
    }
    emptyPlaceNum() {
        let num = 0;
        this.places.forEach(p=>{
            if(p.empty){
                num = num + 1;
            }
        })
        return num;
    }
}

class Place {
    constructor() {
        this.empty = true;
    }
    in() {
        this.empty = false;
    }
    out() {
        this.empty = true;
    }
}

// 测试
// 初始化停车场
const floors = [];
for (let i=0; i<3; i++) {
    const places = [];
    for (let j=0; j<100; j++) {
        places[j] = new Place();
    }
    floors[i] = new Floor(i+1, places);
}
const park = new Park(floors);

// 初始化车辆
const car1 = new Car(100);
const car2 = new Car(200);
const car3 = new Car(300);

console.log('第一辆车进入');
console.log(park.emptyNum());
park.in(car1);

console.log('第儿辆车进入');
console.log(park.emptyNum());
park.in(car2);

console.log('第一辆车离开');
console.log(park.emptyNum());
park.out(car1);

console.log('第二辆车离开');
console.log(park.emptyNum());
park.out(car2);

console.log('第三辆车进入');
console.log(park.emptyNum());
park.in(car3);
console.log('第三辆车离开');
console.log(park.emptyNum());
park.out(car3);
原文地址:https://www.cnblogs.com/wzndkj/p/11750775.html