首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java :如何通知对象?(哪种模式/.)

Java :如何通知对象?(哪种模式/.)
EN

Stack Overflow用户
提问于 2019-09-26 19:23:04
回答 1查看 99关注 0票数 1

CarManufacturer创建一个Car并将其存储在ParkPlace中,直到汽车售出为止。制造商必须知道,在给定的时间,未售出的汽车在哪里。例如,如果一个人从ParkPlace上偷了一辆车,制造商就必须得到“通知”(没有定义“通知”可能是什么,因为我不知道什么实现可能更好)

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

创建一个类作为两个聚合类之间的包装器是正确的吗?就像C中的指针。

在这里,我的UML类图(在法语中: Voiture是Car,Constructor是CarManufacturer,Fiche是Record,Place是ParkPlace,Rangee是停车场中的Row ):

制约因素:

  • 制造商存储的临时“缓冲区”可以去同步。它不是用UML编写的,但是,制造商只能拥有对他所制造的汽车的引用。
  • 不可能直接在制造商中存储汽车,因为它们没有place属性(汽车不拥有一个位置),也不可能在制造商内部存储一个位置,因为当汽车被移动时,构造函数也会保留对一个空位置的引用(或者使用另一辆车)。

如何解决这个问题,还是它是一个正确的实现?

EN

回答 1

Stack Overflow用户

发布于 2019-10-27 11:13:18

问题所在

你的问题不完全清楚,但我知道:

  • 停车场由独立于制造商的一方拥有或管理。
  • 这个派对是做销售的,
  • 这就是你想要通知的原因。

潜在解

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

另一个解决方案是使用事件驱动的体系结构。例如把一辆车从一个地方移到另一个地方,卖一辆车等.由负责的对象发布到一个或多个事件队列,事件处理器执行所需的任务。在你的例子中,你可以想象一个CarEvent队列,在这个队列中,每个制造商都会跟踪与他的汽车相关的事件。

你需要做的是

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

  • Record被出售时,Car会发生什么?
  • 为什么Car也不与Manufacturer相关联?
  • 为什么ParkPlace不知道manufacturer,或者至少Record不知道拥有的Manufacturer

因此,您需要做的是澄清您设计中的责任。例如:

  • ParkPlaceObservable吗?那么谁应该是Observer呢:Record还是Manufacturer
  • 或者Parkplace是找到Record的唯一途径,RecordObservableManufacturerObserver
  • WHo负责分配一辆车(它的记录)到一个地方?在您的关系图中,ParkPlace和Record都有一个函数分配给对方,那么是谁发起的呢?

您还需要考虑聚合:您真的想要在另一个聚合中直接从Place聚合访问到Record吗,而不经过聚合根,哪个是制造商?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58123459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档