根据应用场景画出UML类图并代码实现
第一次尝试这种风格写代码,感觉蛮不错的
这种代码的设计风格实现起来就很舒服
第一题实现:
class Car {constructor(number, name) {this.number = numberthis.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.number},车名->${this.car.name}`)}end () {console.log(`结束行程,显示金额:${this.car.price * 5}`)}
}let car = new Kuaiche(110, '本田')
let trip = new Trip(car)
trip.start()
trip.end()
第二题实现:
class Park {constructor(floors) {this.camera = new Camerathis.screen = new Screenthis.floors = floors || []this.carList = {}}in (car) {// 通过摄像头获取信息const info = this.camera.shot(car)// 停到某个停车位const i = parseInt(Math.random()*100)const place = this.floors[0].places[i]place.in()info.place = placethis.carList[car.number] = info}out (car) {//获取信息const info = this.carList[car.number]// 将停车位清空const place = info.placeplace.out()// 显示时间this.screen.show(car, info.inTime)delete this.carList[car.number]}// 停车场总共还有多少个空的车位emptyPlaceNum (floors) {return this.floors.map((floor) => {return `第${floor.index}层还有${floor.emptyPlaceNum()}个空车位`}).join('\n')}
}
class Floor {constructor(index, places) {//index表示第几层this.index = indexthis.places = places || []}emptyPlaceNum() {let count = 0for (let i=0;i<this.places.length;i++){if (this.places[i].empty) {count+=1}}// console.log(count)return count// let num = 0// this.places.forEach(p => {// if (p.empty) {// num = num + 1// }// })// return num}
}
class Place {constructor() {this.empty = true} in () {// console.error('进来了')this.empty = false}out() {this.empty = true}
}
class Camera {shot(car) {return {num: car.number,inTime: Date.now()}// console.log(`车牌号:${car.number}`)// console.log(`进入时间:${new Date().getTime()}`)}
}
class Screen {show(car, inTime) {console.log(`车牌号:${car.number}`)console.log(`该车辆停留的时间为:${Date.now() - inTime}`)}
}
class Car {constructor(number) {this.number = number}
}// 测试
// 初始化停车场
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(110)
const car3 = new Car(200)
console.log('第一辆车进入')
console.log(park.emptyPlaceNum())
park.in(car1)console.log('----------------')console.log('第二辆车进入')
console.log(park.emptyPlaceNum())
park.in(car2)console.log('----------------')
console.log('第一辆车离开')
park.out(car1)console.log('----------------')
console.log('第二辆车离开')
park.out(car2)console.log('----------------')console.log('第三辆车进入')
park.in(car3)
console.log('----------------')
console.log('第三辆车离开')
console.log(park.emptyPlaceNum())
park.out(car3)
根据应用场景画出UML类图并代码实现相关推荐
- 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等
23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...
- [轉]VS2010 UML类图生成代码
FROM : http://kb.cnblogs.com/a/2280479/ VS2010 UML类图生成代码 1. 安装VS10-KB2403277-x86.exe http://download ...
- 如果你看不懂别人画的 UML 类图,看这一篇文章就够了
目录 1.UML 定义 2.类图中每个类的构成 3.UML类图中箭头的含义 3.1.实线空心箭头 3.2.虚线空心三角箭头 3.3. 实线箭头 3.4.虚线箭头 3.5.尾部为空心菱形箭头 (也可没箭 ...
- 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构
版权声明:本文为博主原创文章,转载时麻烦注明源文章链接,谢谢合作 https://blog.csdn.net/u013088062/article/details/50353202 1.什么是UML ...
- java设计模式之工厂模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之模板方法模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之享元模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- java设计模式之建造者模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式之组合模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
最新文章
- squid 优化指南
- 智能手环功能模块设计_基于STM32实现智能手环设计
- linux++tar打包目录,linux中tar命令打包目录与排除目录打包linux操作系统 -电脑资料...
- C | 构成和编码规范
- 7天拿到阿里Android岗位offer,都是精髓!
- Android MotionEvent中getX()、getRawX()和getTop()的区别
- 这帮吃货程序猿,给阿里食堂来了一波骚操作
- 几种简单的社交网站的标志按钮
- MyBatis 核心对象,工作原理及源码解读
- Android Google Map APIKey申请
- LINUX用户执行过的命令,保存在.bash_history
- JVM内存模型及CMS、G1和ZGC垃圾回收器详解
- 快压下载|快压软件官方下载
- matlab gui串口通信,Matlab GUI上位机界面实现串口通信
- ls只显示文件名/只显示文件夹名
- chmod 777 授权无效
- LINUX彻底清除历史记录命令
- 移动端300ms延迟_移动端延迟300ms的原因以及解决方案
- 最近3年股息率最高排名
- 基于S32K144 CAN总线功能开发详解
热门文章
- Android App添加广告
- VB.net下有个函数strconv可以进行简体繁体转换(转载)
- java中集合对象与string互转的几种方式
- 嵌入式操作系统漫议:功能与特点
- 五招提升你的Google搜索技巧
- linux tomcat6 permgen space,tomcat内存溢出之PermGen space
- android image对象改变,【Android学习】动态放大缩小ImageView里的图片,运用Matrix对象来....
- python退出程序-python退出程序
- [置顶] Android玄铁剑之TextView之传送门
- Webshell河马后门查杀工具配合shell脚本实现多站点自动化查杀