java - 为酒店设计类(class)

标签 java oop object

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

这里如果要遍历所有房间,需要先遍历楼层列表,再遍历房间

例如:酒店 HAS=> 楼层列表 HAS => 房间列表

class Room
{
  int roomNo;
  boolean occupied;
}


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

class Hotel
{
  ArrayList<Floor> floorList = new ArrayList<Floor>();
}

最佳答案

Eg: Hotel HAS=> List of Floors HAS=> List of Rooms

开发人员需要停止尝试模仿现实生活中对象之间的关系。仅仅因为您说“某种实体具有另一种实体”并不意味着它们都属于一个对象集群。

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

如果不知道它将解决什么问题,就无法真正提出一个好的对象模型。更传统的数据结构也是如此;例如在不知道将要使用的数据访问模式的情况下,您无法在 ArrayListHashMap 之间选择更合适的。

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

您是否需要记住整个房间列表以及他们的所有预订才能完成单个房间预订?可能不是,那么为什么您需要一个 Hotel 对象来保存 Floor 的集合,而后者又将保存 Room 的集合?

很可能您只需要一个 Room 聚合,其中包含它自己即将进行的预订的列表。

现在,出于查询目的,您可能仍希望能够列出特定楼层或酒店的所有房间,但不必通过对象引用来表达关系。如果 Room 持有 floorIdFloor 持有 hotelId 那么这些查询可以通过数据库来完成查询。

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

关于java - 为酒店设计类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394981/

相关文章:

java - 为什么passwordEncoder()作为@Bean?

java - 如何实现更好的 OOP

javascript - 根据数组长度多次复制对象 - Angular 2+/JavaScript

Java 数组中 max 和 min 的代码

java - 在Java中读取xml文件 - 仅选定的元素

OOP 中的 Python MQTT 回调

java 对于存储的每个对象引用,调用对象方法

java - 动态类加载器的 IllegalAccessError

java - 哈希表复制导致空指针

java - 有没有办法动态创建对象?