面向对象设计 - 管理 类
info
设计 模拟/替代管理员日常工作的系统
- Gym
 - Parking lot
 - Restaurant
 - Library
 - Super market
 - Hotel
 
管理类解题思路
- 
Clarify - What
从管理的名词来考虑 e.g. Design parking lot
 
- keyword1: Parking lot
 - keyword2: Vehicle
 
- 
Core object - 有进有出
考虑这个管理系统里,Input 和 Output 是什么 e.g. Elevator System
 
- Input: Request
 - Output: Elevator
 
- Use case - 从管理员角度考虑
 
- Reserve 预定。单独的部分,不是所有管理类系统都需要预定
 - Serve 服务
 - Checkout 结账
 
- 
Class
设计类图的时候,经常可以使用收据的形式,来保管信息 e.g. 图书馆
 
- User
 - Receipt: 记录哪一个 user 借了哪些 books,当还书时销毁掉 receipt
 - Book
 
实战 - Design Parking Lot
Clarify
Step1. What
keywords: Parking lot, Vehicle, Parking Spot ...


- Parking Spot 是否考虑残疾人车位
 - Parking Spot 是否考虑充电车位
 - 如何设计停车场来支持不同大小的车
 
对于本题
- Parking lot: 考虑多层的 Parking lot,无错层
 - Vehicle: 考虑三种大小的车
 - 不考虑残疾人停车位/充电车位
 
Step2. How
已知信息: 所有车位都是相同规格的 要站在 题目的主体 即 Parking lot 去考虑,而不是站在停车客户的视角去考虑
规则 1: 如何停车
- 从车的角度: 开车进停车场 -> 经过每一个位置看看能不能停 -> 停进车位
 - 从停车场的角度: 开车进停车场 -> 返回一个能停的位置 -> 停进车位
 

针对本题
- 如果有大车,可以横向停车,即占多个车位
 - 停车场能够显示空闲位置的个数
 
规则 2: 收费
一般只需要简单的思考是否需要收费
针对本题
- 根据时间收费
 
Step3. Who
N/A
Core Object
- 什么是 Core object
 - 为什么要定义 Core object
 - 如何定义 Core object
 

Cases
- 什么是 Use case
 - 为什么要写 Use case
 - 如何写 Use case
 
Vehicle
N/A
Parking Lot
- Get available count
 - Park vehicle
 - Clear spot
 - Calculate price
 
对应上文所提到的管理类场景 Use case:
- Reservation: [X]
 - Serve: Parking vehicle
 - Check out: Clear spot + Calculate price
 
Spot
N/A
Class
- 什么是类图
 - 为什么要画类图
 - 怎么画类图
 
Use case: Get available counts
Parking lot shows how many available spots in total
- 变量
int availableCount记录可用停车位数量, 函数public int getAvailableCount()来返回当前可用的停车位数量. 
如何分别显示出每一层的空位个数
- 新增
Level类,ParkingLot类中保存List<Level> levels 
Use case: Park vehicle
- Parking lot checks the size of vehicle: 对每个汽车类增加 变量
int Size和 方法public int getSize() - Parking lot find an available spot for this vehicle: 对
Spot类增加boolean available和 方法public boolean isAvailable() - Vehicle takes the spot: 
Spot类中新增 函数void takeSpot()和void leaveSpot() 
Use case: Clear spot
- Parking lot find the spot to clear
 - Update spot to be available
 - Update available count for each levle 当车离开的时候更新 available count