/ 从设计到模式
  // 设计模式简介
  // 设计
  // 模式
  // 分开
  // 从设计到模式
    // 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个车位

javascript 面向对象-面试题实例的更多相关文章

  1. javascript面向对象的测试实例

  2. javaScript 面向对象开发实例

    javaScript 面向对象开发实例 这个是结合require的模块化开发,首先创建构造函数: //test.js 1 function Test(lists) { var config={ nam ...

  3. JavaScript面向对象 实例与原型

    JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new  function function f () {} 这个函数 会继承 Func ...

  4. DOM+面向对象面试题

    1.dom常见的节点类型---------------------------解彬1510-B 1.nodeType------节点类型,元素节点是1,文本节点是3. 2.firstChild---- ...

  5. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  6. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  7. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

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

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  9. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

随机推荐

  1. 手写代码注意点--java.lang.Math 相关

    1-如果用到了Math的函数,需要手动写上: import java.lang.Math; 2-求x的y次方,用的是Math.pow(x,y); 注意,返回值是double!!! 不是int, 如果需 ...

  2. [CentOS]Failed to start OpenSSH server daemon

    问题描述: 以前一直能够通过Xshell来连接服务器,但是突然连接不上了. 解决思路: 首先通过命令查看SSH服务的状态: systemctl status sshd 可以看到,有错误,但是没有显示详 ...

  3. http与中文编码传输

    分类: http网络及RFC2012-08-12 15:01 3716人阅读 评论(0) 收藏 举报 urljavascript工具pythonimportjsp 关于http的RFC文档:http: ...

  4. python多线程并发

    # coding=utf8 # 使用前需安装net-snmp-utils或net-snmp包 from _utils.patrol2 import run_cmd import sys import ...

  5. MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)

    一.所有数据都存放于一张表中的弊端:1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 解决方案:分表a.分表 + foreign key: 有硬性限制(关联表中的关联字段内容必须来自于被关联表), ...

  6. ROM、PROM、EPROM、EEPROM、FLASH ROM简介

    ROM指的是"只读存储器",即Read-Only Memory.这是一种线路最简单半导体电路,通过掩模工艺, 一次性制造,其中的代码与数据将永久保存(除非坏掉),不能进行修改.这玩 ...

  7. HDU 1796 (容斥原理)

    容斥原理练习题,忘记处理gcd 和 lcm,wa了几发0.0. #include<iostream> #include<cstdio> #include<cstring& ...

  8. hadoop客户端如何配置

    Hadoop集群主要是由三部分组成的:主节点.从节点和客户端,即master.slave和client.我们在搭建hadoop集群的时候通常只考虑了主节点和从节点的搭建,却忽略了客户端.当我们搭建完成 ...

  9. Codeforces 576E Painting Edges [分治,并查集]

    洛谷 Codeforces 建议阅读这篇博客作为预备.无耻地打广告 思路 与bzoj4025很相似,思路也差不多,可以看上面那篇博客. 仍然是用二分图的充要条件:没有奇环. 然而这题难在每条边的存在时 ...

  10. spring、springMVC、mybatis配置文件

    一.jdbc.properties 文件: driver=com.mysql.jdbc.Driverurl=jdbc:mysql://192.168.31.xxx:3306/abc?useUnicod ...