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队列,在这个队列中,每个制造商都会关注与他的汽车相关的事件

你需要做什么 不幸的是,您的模型中存在太多不明确的问题。例如:

  • 汽车出售时,
    记录会发生什么情况
    
  • 为什么
    汽车
    不也与
    制造商
    关联
  • 为什么
    停车场
    不知道
    制造商