javascript 面向對象-面試題實例


/ 從設計到模式
  // 設計模式簡介
  // 設計
  // 模式
  // 分開
  // 從設計到模式
    // 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個車位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM