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个车位
javascript 面向对象-面试题实例的更多相关文章
- javascript面向对象的测试实例
- javaScript 面向对象开发实例
javaScript 面向对象开发实例 这个是结合require的模块化开发,首先创建构造函数: //test.js 1 function Test(lists) { var config={ nam ...
- JavaScript面向对象 实例与原型
JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new function function f () {} 这个函数 会继承 Func ...
- DOM+面向对象面试题
1.dom常见的节点类型---------------------------解彬1510-B 1.nodeType------节点类型,元素节点是1,文本节点是3. 2.firstChild---- ...
- JavaScript学习总结(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- javascript面向对象系列第四篇——选项卡的实现
前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...
- javascript面向对象系列第三篇——实现继承的3种形式
× 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...
- javascript面向对象系列第一篇——构造函数和原型对象
× 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...
- Javascript面向对象(封装、继承)
Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...
随机推荐
- VMware下CentOS7设置网络以及修改系统语言
1.在VMware里,依次点击”编辑“ - ”虚拟网络编辑器“,如下图,我选择的是NAT模式 为了能够使用静态IP,这里不要勾选”使用本地DHCP服务将IP分配给虚拟机“这个选项.然后是配置子网ip, ...
- 即速应用_微信小程序开发 http://www.jisuapp.cn/
即速应用_微信小程序开发 http://www.jisuapp.cn/
- jquery源码解析
//局部作用域,外部引用不到这个闭合函数里面的东西,这时候需要用提供的对外访问接口来访问里面的变量 (function(){ ; function $() { alert(a) } window.$ ...
- Linux内核的整体架构简介
1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统.之后,会介绍Linux内核源文件的目录结构,并和各个软 ...
- codeforces 955F Cowmpany Cowmpensation 树上DP+多项式插值
给一个树,每个点的权值为正整数,且不能超过自己的父节点,根节点的最高权值不超过D 问一共有多少种分配工资的方式? 题解: A immediate simple observation is that ...
- 007_Chrome的Waterfall详解
一. 浏览器根据html中外连资源出现的顺序,依次放入队列(Queue),然后根据优先级确定向服务器获取资源的顺序.同优先级的资源根据html中出现的先后顺序来向服务器获取资源 Queueing. 出 ...
- 用于主题检测的临时日志(c5ac07a5-5dab-45d9-8dc2-a3b27be6e507 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
这是一个未删除的临时日志.请手动删除它.(5051e554-d10d-4e48-b2ca-37c38a30153a - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- 【原创】大叔经验分享(36)CM部署kafka
1 下载kafka parcel http://archive.cloudera.com/kafka/parcels/latest/KAFKA-3.1.1-1.3.1.1.p0.2-el7.parce ...
- 计算机中K到底是1000还是1024?
1000和1024的争论,其实是传输领域和存储领域概念不清引起的;在传输领域,1秒钟传输多少字位(即b,bit),肯定是用10进制表示,所以是1kb=1000b,即1秒钟传输1000个比特位;就好像: ...
- 幂的运算:X的n次幂
计算X的n次幂,有多种算法 例子:计算2的62次方. method 1 :time = 1527 纳秒. 常规思路,进行61次的乘法! private static long mi(long X, l ...