Java:如何通知对象?(哪种模式/…)
Java:如何通知对象?(哪种模式/…),java,uml,Java,Uml,CarManufacturer创建一辆汽车并将其存储在停车场中,直到汽车售出。制造商必须知道,在给定的时间,未售出的汽车在哪里。 例如,如果a从停车场取车,则必须“通知”制造商(没有定义“通知”可能是什么,因为我不知道哪种实现更好) 我觉得这是一个经典问题,可以手动检索对象。我可以反复浏览世界各地所有工厂的所有停车场,检查哪一个是给制造商的。但这是低效的。解决这个问题的标准方法是什么 创建一个类作为两个聚合类之间的包装器是否正确?就像C中的指针 这里是我的UML类图(法语:Voiture是Car
CarManufacturer
创建一辆汽车
并将其存储在停车场
中,直到汽车售出。制造商必须知道,在给定的时间,未售出的汽车在哪里。
例如,如果a从停车场
取车,则必须“通知”制造商(没有定义“通知”可能是什么,因为我不知道哪种实现更好)
我觉得这是一个经典问题,可以手动检索对象。我可以反复浏览世界各地所有工厂的所有停车场,检查哪一个是给制造商的。但这是低效的。解决这个问题的标准方法是什么
创建一个类作为两个聚合类之间的包装器是否正确?就像C中的指针
这里是我的UML类图(法语:Voiture是Car,Constructor是CarManufacturer,Fiche是Record,Place是ParkPlace,range是parking中的行):
限制条件:
- 制造商存储的临时“缓冲区”可以取消同步。它不是用UML编写的,但是,制造商只能拥有对他制造的汽车的引用
- 不可能直接在制造商中存储汽车,因为它们没有位置属性(汽车没有位置),也不可能在制造商中存储位置,因为当汽车移动时,构造器还将保留对空位置(或使用不同汽车)的引用
- 停车场由独立于制造商的一方拥有或管理李>
- 该方进行销售
- 这就是你想要通知的原因李>
可观察的对象通知一个或多个观察者其状态已更改。然后通过调用观察者的方法来实现通知,最终将调用对象的引用传递给该方法(如果观察者同时跟踪多个观察者)
另一个解决方案是使用事件驱动的体系结构。诸如将汽车从一个地方移到另一个地方、出售汽车等活动。。。由负责的对象发布到一个或多个事件队列,事件处理器执行所需的操作。在你的案例中,你可以想象一个CarEvent队列,在这个队列中,每个制造商都会关注与他的汽车相关的事件
你需要做什么
不幸的是,您的模型中存在太多不明确的问题。例如:
- 当
汽车出售时,记录会发生什么情况李>
- 为什么
汽车
不也与制造商
关联李>
- 为什么
停车场
不知道制造商
,或者至少记录
不知道拥有制造商
李>
因此,您需要做的是澄清设计中的责任。例如:
ParkPlace
是否可观察到?但是谁应该是观察者
:是记录
还是制造商
李>
- 或者说,
Parkplace
是找到记录的唯一途径,而记录
是可观察的
,而制造商
是观察者
李>
- 谁负责将一辆汽车(其记录)分配到一个地方?在您的图表中,ParkPlace和Record都有一个分配给另一个的功能,那么是谁发起的呢李>
您还需要考虑聚合:您真的想直接从位置
聚合访问另一个聚合中的记录
,而不通过聚合根(即制造商)访问吗
一旦你澄清了所有这些,你就需要重新思考这些关联。这将帮助您做出正确的实现选择。具体地说,在您的图表中,从制造商
到记录
的关联似乎实现为制造商
中的记录列表。这种实现关联的方式意味着从制造商到记录的可导航性,但不是相反 问题
你的问题并不完全清楚,但我理解:
- 停车场由独立于制造商的一方拥有或管理李>
- 该方进行销售
- 这就是你想要通知的原因李>
潜在解决方案
问题的经典解决方案是:一个可观察的对象通知一个或多个观察者其状态已更改。然后通过调用观察者的方法来实现通知,最终将调用对象的引用传递给该方法(如果观察者同时跟踪多个观察者)
另一个解决方案是使用事件驱动的体系结构。诸如将汽车从一个地方移到另一个地方、出售汽车等活动。。。由负责的对象发布到一个或多个事件队列,事件处理器执行所需的操作。在你的案例中,你可以想象一个CarEvent队列,在这个队列中,每个制造商都会关注与他的汽车相关的事件
你需要做什么
不幸的是,您的模型中存在太多不明确的问题。例如:
- 当
汽车出售时,记录会发生什么情况李>
- 为什么
汽车
不也与制造商
关联李>
- 为什么
停车场
不知道制造商
,