/ 从设计到模式
  // 设计模式简介
  // 设计
  // 模式
  // 分开
  // 从设计到模式
    // 23种设计模式
      // 创建型
        // 工厂模式(工厂方法模式,抽象工厂模式,建造者模式)
        // 单例模式
        // 原型模式
      // 组合型

      // 行为型
        // 策略模式
        // 模板方法模式
        // 观察者模式
        // 迭代器模式
        // 职责连模式
        // 命令模式
        // 备忘录模式
        // 状态模式
        // 访问者模式
        // 中介者模式
        // 解释器模式
      //结构型
        // 适配器模式
        // 装饰器模式
        // 代理模式
        // 外观模式
        // 桥接模式
        // 组合模式
        // 享元模式

// 打车时,可以打专车或者快车。任何车都有车牌号和名称
// 不同车价格不同,快车每公里1元,专车每公里2元
// 行程开始时,显示车辆信息
// 行程结束时,显示打车金额(假定行程就5公里)

// 画出UML类型
// 用ES6语法写出该实例

// 车 -父类
class Car{
  constructor(number,name){
     this.number = number
    this.name = name
  }
}

// // 快车
class Kuaiche extends Car{
  constructor(number,name){
       super(number,name)
           this.price = 1
  }
}

// // 专车
class Zhuanche extends Car{
  constructor(number,name){
    super(number,name)
    this.price = 2
  }
}

// // 行程
class Trip{
  constructor(car){
    this.car = car
  }
  start(){
    console.log(`运行开始,名称:${this.car.name},车牌号:${this.car.number}`)
  }
  end(){
    console.log('运行结束,价格:'+ (this.car.price)*5)
  }
}

// 测试
// let car = new Kuaiche(100,"北京现代")
// let trip = new Trip(car)
// trip.start()
// trip.end()

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

// 车
class Car{
  constructor(num){
    this.num = num
  }
}
// 停车场
class Park{
  constructor(floors){
    this.floors = floors || []
    this.camera = new Camera()
    this.screen = new Screen()
    this.cartList = {} //存储
  }
  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.cartList[car.num] = info
    console.log(this.cartList)
  }
  out(car){
    const info = this.cartList[car.num]
    // 讲停车位清空
    const place = info.place
    place.out()
    // 显示时间
    this.screen.show(car,info.inTime)
    // 清空
    delete this.cartList[car.num]
  }
  emtpyNum(){
    return this.floors.map(floor =>{
      return `${floor.index} 层还有${floor.emptyPlaceNum()}个车位`
    }).join('\n')
  }
}

// 层次
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
  }
}

// 摄像头
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)
  }
}

//初始化停车场
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)

park.in(car1)
console.log(park.emtpyNum())
park.in(car2)
console.log(park.emtpyNum())

park.out(car1)
console.log(park.emtpyNum())
park.out(car2)
console.log(park.emtpyNum())

park.in(car3)
console.log(park.emtpyNum())
park.out(car3)
console.log(park.emtpyNum())

// 1 层还有99个车位
// 2 层还有100个车位
// 3 层还有100个车位

// 1 层还有98个车位
// 2 层还有100个车位
// 3 层还有100个车位

// 车牌号 100
// 停车时间 17

// 1 层还有99个车位
// 2 层还有100个车位
// 3 层还有100个车位

// 车牌号 200
// 停车时间 3
// 1 层还有100个车位
// 2 层还有100个车位
// 3 层还有100个车位

// 1 层还有99个车位
// 2 层还有100个车位
// 3 层还有100个车位

// 车牌号 300
// 停车时间 5
// 1 层还有100个车位
// 2 层还有100个车位
// 3 层还有100个车位

转载于:https://www.cnblogs.com/sklhtml/p/9488549.html

javascript 面向对象-面试题实例相关推荐

  1. 《JavaScript前端开发与实例教程(微课视频版)》

    #好书推荐##好书奇遇季#<JavaScript前端开发与实例教程(微课视频版)>,京东当当天猫都有发售.定价59元,网店打折销售更便宜.适合JavaScript初学者,可作为高校相关课程 ...

  2. JavaScript面向对象和ES6笔记

    JavaScript面向对象 1.面向对象编程介绍 1.1 两大编程思想 面向过程 面向对象 1.2 面向过程编程POP(Process-oriented programming) **面向过程**就 ...

  3. 快问快答JS面向对象面试题

    1.说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量.闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露.在js中,函数即闭包,只有函数才 ...

  4. JavaScript面向对象编程

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  5. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...

  7. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承&q ...

  8. JavaScript面向对象编程(1)-- 基础

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  9. javaScript面向对象表示

    这里主要简单写一下javaScript面向对象的不断发展的一些写法和优缺点.直接开门见山. 1.最简单的方式 创建Object的实例,为它添加属性和方法 var car = new Object(); ...

最新文章

  1. mysql修改表和列
  2. php js获取file,PHP file_get_contents 读取js脚本的问题
  3. 游戏关卡中的类型运用:《LOOP》的无限可能
  4. Nexus:一站式私有仓库管理(NuGet、Maven、npm、Docker)
  5. mac python运行按哪个键_#mac python如何使用教程#怎么在mac终端运行python程序
  6. 7005.element-ui组件
  7. cocos2d(背景图片循环滚动)
  8. AndroidStudio安卓原生开发_activity关闭的时候把数据传递给上一个activity---Android原生开发工作笔记93
  9. easyUI s MVC h分页
  10. oc快速生成单例头文件解析
  11. twitter服务器部署系统
  12. 捷联惯导基础知识解析之六(捷联惯导与组合导航仿真)
  13. 赛程安排 单循环赛 matlab程序
  14. 无痛学习ISAC(一)
  15. MySql 报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains....
  16. java基础学习总结——方法的重载(overload)
  17. 共享计算机如何重新登录密码,电脑共享后怎么登陆密码怎样设置
  18. AndroidStudio 编译报错 abc_list_selector_disabled_holo_light.9.png
  19. 【Alpha】第四次Daily Scrum Meeting
  20. 智能投顾-用户画像、投资组合选择、推荐引擎、大数据挖掘

热门文章

  1. 专注分析40年,SAS如何看待数据 | 直击SAS 2018全球论坛
  2. 全网最详细的一篇SpringCloud总结
  3. php连接共享打印机实例,win10怎么连接共享打印机
  4. deepFM排序模型与widedeep的差异
  5. Win11C盘变红怎么办?Win11C盘变红的清理方法
  6. BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun
  7. 考研院校计算机排名,2016年计算机考研院校排名
  8. Python绘制时序图,ACF和PACF图
  9. ”蚂蚁神相“正式启用
  10. Sql Server查看所有数据库名,表名,字段名(SQL语句)