Java 为酒店设计课程

Java 为酒店设计课程,java,oop,object,Java,Oop,Object,我要设计一个类,它有一个对象列表,列表中的每个对象都是另一个对象列表。有没有更好的方法来设计这种场景 在这里,如果我想遍历所有房间,我需要首先遍历楼层列表,然后遍历房间 酒店拥有=>楼层清单拥有=>房间清单 class Room { int roomNo; boolean occupied; } class Floor { int floorNo; ArrayList<Room> roomList = new ArrayList<Room>(); }

我要设计一个类,它有一个对象列表,列表中的每个对象都是另一个对象列表。有没有更好的方法来设计这种场景

在这里,如果我想遍历所有房间,我需要首先遍历楼层列表,然后遍历房间

酒店拥有=>楼层清单拥有=>房间清单

class Room
{
  int roomNo;
  boolean occupied;
}


class Floor
{
  int floorNo;
  ArrayList<Room> roomList = new ArrayList<Room>();
}

class Hotel
{
  ArrayList<Floor> floorList = new ArrayList<Floor>();
}
教室
{
国际房间号;
布尔占用;
}
课堂
{
国际地板;
ArrayList roomList=新建ArrayList();
}
一流酒店
{
ArrayList floorList=新的ArrayList();
}
酒店拥有=>楼层清单拥有=>房间清单

class Room
{
  int roomNo;
  boolean occupied;
}


class Floor
{
  int floorNo;
  ArrayList<Room> roomList = new ArrayList<Room>();
}

class Hotel
{
  ArrayList<Floor> floorList = new ArrayList<Floor>();
}
开发人员需要停止模仿对象之间的真实关系。仅仅因为你说“某种实体有另一种实体”,并不意味着它们都属于同一个对象集群

您需要查看的是对象模型将要处理的用例(命令)以及在处理过程中必须保护的不变量(规则)

如果你不知道一个好的对象模型将要解决什么问题,你就不可能真正提出一个好的对象模型。对于更传统的数据结构也同样适用;e、 g.在不知道将使用的数据访问模式的情况下,您无法在
ArrayList
HashMap
之间选择更合适的方式

例如,如果您试图对不应接受重叠预订的房间预订流程进行建模,则必须创建尽可能小的数据集群,以允许对象模型完成此任务

您是否需要将整个房间列表以及他们的所有预订都存储在内存中以完成单人房间预订?可能不会,那么为什么您需要一个包含
楼层
集合的
酒店
对象,而楼层又将包含
房间
集合呢

您可能只需要一个
房间
集合,其中包含自己即将预订的房间列表

现在,出于查询目的,您可能仍然希望能够列出特定楼层或酒店的所有房间,但关系不必通过对象引用来表示。如果
房间
抓住
地板
,而
地板
抓住
酒店ID
,则可以通过数据库查询来完成这些查询


我知道你的问题纯粹是学术性的,可能与现实生活中的问题无关,但你需要明白,对象模型并不仅仅是根据现实生活中的关系精心设计出来的:你需要查看命令

这样想:如果你真的在酒店里亲自动手,你会怎么做?@JonK我会先检查一楼的空位,然后是第二层,一直到最后一层。那么严格来说,必须遍历这两个列表吗?你能单独列出一份空房清单吗?不管空房在哪一层?这使得检查一个空房间的效率更高(你所要做的就是
vacantRooms.isEmpty()
),但你必须记住,当每个房间都有人住的时候,要从列表中删除它们。@JonK好的,我可以做到。我只能遍历空房间,但正如您所说,我需要维护新的
vacantRooms
列表。谢谢如果你走这条路,你只需要确保你的
occupt()
vacket()
方法(或它们的等价物)正确地添加和删除到列表中。是的,我需要根据用例进行设计。但我让trobule理解您关于重叠预订和
房间的评论。你能帮我吗explain@mc20在预订
房间时
,为了确保预订不会与其他房间发生冲突,您需要在所有即将预订的房间和特定房间(保存所有这些数据的对象)周围设置边界。因此,
房间
集合将保留即将进行的预订。调用
room.book(…)
时,您可以遍历bookings以查看是否存在冲突。如果有人拒绝预订,但如果没有,则记录预订。@mc20如我们所见,您不需要加载
Hotel
类来处理此用例。还必须建立并发保护机制,以避免在竞争条件下违反规则。通常乐观并发比悲观锁定更有效。我不确定这是否回答了你的问题?