【问题标题】:Which message passing method is suitable if a value need to be passed between many objects?如果需要在多个对象之间传递值,哪种消息传递方法适合?
【发布时间】:2017-08-31 04:22:06
【问题描述】:

所以我有一个场景,值id 需要在不同对象之间传递,但每个对象的实例化是按层次顺序排列的。

例如:

ObjA 
  - Gets and id from web service
  Instantiate ObjB - (Obj A passes id to Obj B while instantiating)
     - Obj B instantiates Obj C (Obj B passes id to Obj C while instantiating)

它继续进行 5-6 级消息传递和分层对象实例化。

但是实例化时对象之间的消息传递似乎是多余的。所以我想如果我创建一个单例类并且每个对象在单例中访问相同的值会更好吗?还是有更好的办法?

【问题讨论】:

  • 您也可以将其视为上下文(对象中的数据位于该 id 的上下文中)。然后你可以有一些容器类型,其中存储了 id 和相关消息。
  • 对不起,我没听懂。如果您能给我看一些代码示例,我将不胜感激。 :)
  • 单例是一种反模式。它使代码无法测试,并防止多线程。传递 ID(或包含 ID 的上下文对象)很好。
  • 因为我们在层次结构中的每个对象中传递相同的值。如果对象的层次结构有5-6级,通过context对象或者id传值会不会太麻烦?
  • 也只有顶级对象(对象a)会设置id,其他人只会得到它

标签: design-patterns object-oriented-analysis message-passing


【解决方案1】:

也许您的所有对象都可以扩展一个通用接口。让我们说

Interface SomeObject{}

现在在最顶层,你可以创建一个列表

final List<SomeObject> objects = Arrays.asList(new Object1(), new Object2() and so on);

现在,当您获得 ID 后,您可以运行(如果这很重要,使用此列表还将保持设置 Ids 的顺序。

for(SomeObject obj: objects){
    obj.setId(ID);
}

或者您可以使用流以更少的代码行来完成它。

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多