预定类面向对象设计

预定类面向对象设计

  • CORE OBJECT
  • CASES
  • USE CASE
      • Usecase:Findtable
      • Takeorder
      • Checkout
  • Restaurant reservation system
    • •Searchcriteria
      • -How to know if a table is open for reservation for a timeslot?
      • 如何知道对于一张Table:
    • Cancel reservation
  • Hotel reservation system
    • Core object
    • USE CASE
      • Search for available rooms
      • Make reservation
      • Cancel reservation
      • FINAL VIEW
  • Booking system
    • What
    • Clarify
    • How
    • core object
    • use cases
    • class
      • •Search for hotels
        • -Based on request(startdate+end date+city +groupsize)
        • -Check for all hotels in this city
        • -For such hotels, if this is enough capacity for group size during dates
        • -List all hotels that satisfy above criteria
      • •Make reservation
      • •Cancel reservation
      • challenge
        • -Need to get price for each reservation![在这里插入图片描述](https://img-blog.csdnimg.cn/20210217062039853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FucWkzNzc2,size_16,color_FFFFFF,t_70)
        • -Need to take a payment method
      • Strategy Pattern

management RESTAURANT

CORE OBJECT

预定类面向对象设计_第1张图片
预定类面向对象设计_第2张图片

CASES

•Restaurant
-Findtable
-TakeOrder
-Checkout

•Mangement类常见usecase
Reserve:
Serve:
Checkout:

USE CASE

Usecase:Findtable

Restaurantfindanavailabletable,anchangethetabletobe
unavailable

预定类面向对象设计_第3张图片

Takeorder

-Restauranttakesanorder

预定类面向对象设计_第4张图片

Checkout

-Restaurantchecksoutatable/order,markthetableavailableagain
-Calculateorderprice
预定类面向对象设计_第5张图片
-Singleresponsibility principle
-ForceTable– Ordermapping
-Sharetableusecase
预定类面向对象设计_第6张图片
•How tomarkatableavailable?
预定类面向对象设计_第7张图片
-桌子大小不同?
Party && Table->Capacity
Findtablebasedoncapacity
预定类面向对象设计_第8张图片

Restaurant reservation system

-考虑预定的东西
例子:机票
机舱/座位号/…
•Usecase
-Search
-Select
-Cancel

Searchcriteria->Search()->List<Result>->Select()->Receipt

•Searchcriteria

预定类面向对象设计_第9张图片
•List
-当选择的时间段可以/不行时,系统应该给出什么反馈?

-可以预定:直接进入Confirm阶段
-不能预定:Throw exception/ Show message
-Design:PairfindTableForReservation(Timeslot)
throwsNoTableForReservationException
-Design:voidconfirmReservation(Pairreservation)
-为什么我们可以跳过List这个步骤?
因为Table是一样的,用户不用选择也不会知道是订1号桌还是2号桌
预定类面向对象设计_第10张图片

-How to know if a table is open for reservation for a timeslot?

预定类面向对象设计_第11张图片

如何知道对于一张Table:

Any reservationduring Timeslot – MAX_DINETIMEtoTimeslot +MAX_DINETIME?
Solution1:
每张Table按时间排序保留一个List,对于每一个进来query的timeslot,都检查是否有
符合上述区间的timeslot已经被预定了
Solution2:
保存一个Centralized的Map,有被confirm过的timeslot就插入这个Map.
Map>
当query一个新的timeslot的时候,检查这个区间内已经被预定过的Table,
排除之后剩下的就是可选的桌子,随意选一张即可
•分析各自的优缺点:
Solution1:Reservation的信息集中在Table里,不方便统一管理
e.g.清理今日的所有reservation
Solution2:如果Timeslot可以分得很细 (每五分钟一个timeslot),
MAX_DINETIME假如为2小时,那么需要查24个entry

预定类面向对象设计_第12张图片

Cancel reservation

•Restauranttakesacancelreservationrequest,andaskthetableto
freethattimeslot.

预定类面向对象设计_第13张图片

Hotel reservation system

Core object

预定类面向对象设计_第14张图片

USE CASE

Hotel:
-Search for available rooms
-Make reservation
-Cancel reservation

Search for available rooms

1:Based on search criteria
预定类面向对象设计_第15张图片

2:Go through rooms to check availability
预定类面向对象设计_第16张图片

3:list available room types and available count
预定类面向对象设计_第17张图片

Make reservation

1:Add Room Type and number of rooms in a request
预定类面向对象设计_第18张图片

2:Send request to Hotel
预定类面向对象设计_第19张图片

3:If there is enough room left, confirm the reservation
预定类面向对象设计_第20张图片

4:If there isn’t enough room left, throw exception
预定类面向对象设计_第21张图片

CHANLLENGE:
预定类面向对象设计_第22张图片
预定类面向对象设计_第23张图片
预定类面向对象设计_第24张图片
预定类面向对象设计_第25张图片
预定类面向对象设计_第26张图片
预定类面向对象设计_第27张图片
预定类面向对象设计_第28张图片

Cancel reservation

1:Hotelsystemtakesareservation,andcancelit.

FINAL VIEW

预定类面向对象设计_第29张图片

Booking system

预定类面向对象设计_第30张图片

What

SearchcriteriaA
List
SearchcriteriaB
List
Receipt

Clarify

用Start Date,EndDate,Groupsize,City

How

Search()
Select()
Search()
Select()
-在同样的City就能放进List里
-Hotel在List里的顺序不重要

core object

预定类面向对象设计_第31张图片

use cases

•BookingSystem
-Searchforhotels
-Makereservation
-Cancelreservation

class

预定类面向对象设计_第32张图片

•Search for hotels

-Based on request(startdate+end date+city +groupsize)

预定类面向对象设计_第33张图片

-Check for all hotels in this city

预定类面向对象设计_第34张图片

-For such hotels, if this is enough capacity for group size during dates

预定类面向对象设计_第35张图片

-List all hotels that satisfy above criteria

预定类面向对象设计_第36张图片

•Make reservation

-Pickahotel
-Send reservationrequestto thathotel
预定类面向对象设计_第37张图片

•Cancel reservation

-Cancel reservation for a hotel
预定类面向对象设计_第38张图片

challenge

•Can you add payment in your system?

-Need to get price for each reservation预定类面向对象设计_第39张图片

预定类面向对象设计_第40张图片

-Need to take a payment method

预定类面向对象设计_第41张图片

Strategy Pattern

预定类面向对象设计_第42张图片

你可能感兴趣的:(#,OOD)