gpt4 book ai didi

Java : how to notify objects ?(其中模式/...)

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:45 27 4
gpt4 key购买 nike

CarManufacturer 创建一辆 Car 并将其存储在 ParkPlace 中,直到汽车售出。制造商必须知道在给定时间未售出的汽车在哪里。例如,如果aParkPlace取走一辆车,则必须“通知”制造商(无需定义“通知”是什么,因为我不知道哪种实现可以更好)

我觉得这是一个可以手动检索对象的经典问题。我可以遍历世界各地所有工厂的所有 parking 位,并检查哪一个是给制造商的。但这是低效的。解决这个问题的标准方法是什么?

创建一个充当两个聚合类之间的包装器的类是否正确?就像C中的指针的指针一样。

这是我的 UML 类图(法语:VoitureCarConstructorCarManufacturerFicheRecordPlaceParkPlaceRangee 是 parking 场中的 Row):

UML Class Diagram

约束:

  • 制造商存储的临时“缓冲区”可能会被取消同步。它不是用 UML 编写的,但是制造商只能拥有对其制造的汽车的引用。

  • 不可能将汽车直接存储在制造商中,因为它们没有地点属性(汽车不拥有地点),也不可能在制造商中存储地点,因为当汽车移动时,构造函数还将保留对空地点(或不同汽车)的引用。

如何解决这个问题,或者这是一个正确的实现吗?

最佳答案

问题

你的问题不太清楚,但我明白:

  • parking 场由独立于制造商的一方拥有或管理。
  • 该方进行销售,
  • 这就是您需要通知的原因。

潜在的解决方案

解决您问题的经典方法是 observer pattern :一个Observable对象通知一个或多个Observer它的状态已经改变。然后通过调用观察者的方法来实现通知,最终将调用对象的引用传递给该方法(如果观察者同时跟踪多个可观察对象)。

另一个解决方案是使用事件驱动架构。诸如将汽车从一个地方移动到另一个地方、出售汽车等事件......由负责的对象发布到一个或多个事件队列,并且事件处理器执行所需的操作。对于您的情况,您可以想象一个 CarEvent 队列,其中每个制造商都会跟踪与其汽车相关的事件。

你需要做什么

不幸的是,您的模型中有太多不清楚的问题。例如:

  • 汽车售出时,记录会发生什么情况?
  • 为什么汽车没有也与制造商关联?
  • 为什么ParkPlace不知道manufacturer,或者至少Record不知道拥有Manufacturer

所以你需要做的是明确设计中的职责。例如:

  • ParkPlace 是一个 Observable 吗?但是谁应该是观察者:记录还是制造商
  • 或者Parkplace只是查找Record的方法,而RecordObservable,而ManufacturerObserver
  • 谁负责将汽车(及其记录)分配到某个地点?在你的图中,ParkPlace 和 Record 都有一个可以分配给对方的函数,那么谁是发起的呢?

您还需要考虑聚合:您是否真的想直接从 Place 聚合访问另一个聚合中的 Record ,而不通过聚合根(即Manufacturer)?

一旦你澄清了这一切,你需要重新思考navigability沿着协会。这将帮助您做出正确的实现选择。具体来说,在您的图表中,从 ManufacturerRecord 的关联似乎是作为 Manufacturer 中的 Records 列表实现的。这种实现关联的方式意味着从制造商到记录的可导航性,但反之则不然。

关于Java : how to notify objects ?(其中模式/...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com