如何实现这个观察者模式?

时间:2010-03-19 13:11:12

标签: java design-patterns

我有4个类,描述状态图。 NodeEdgeComponentOfNodeComponentOfEdge

来自ComponentOfEdge

ComponentsOfNode个化合物。 Node可以有0..n外边缘。 Edge只能有Nodes

Edge应该能够提供ComponentOfNode,但仅限Nodes Edge ComponentOfEdge ComponentsOfNode的形式。

用户可以更改Edges。我需要将此更改传播到所有{{1}}。我该怎么办?我希望应该使用观察者模式。

你能用伪代码给我一个例子吗?

3 个答案:

答案 0 :(得分:2)

你知道,在Java中,Observer / Observable模式的最佳示例(以及在非Swing代码中使用的简单)是propertyChange[Event/Listener/Support]三位一体。在官方Java tutorial中记录(不幸的是在Swing示例中,导致混淆)。

答案 1 :(得分:0)

观察者是一个非常简单的模式。您需要做的就是在观察类中实现一个方法,该方法由观察类在更改时调用。

在您的情况下,您可能有:

class Edge {
  // class definition

  public void nodeChanged(Node changed) {

    // do stuff

   }
}

class Node {
  // class definition

  protected void onChange() {

    for (Edge e : myEdges) {
      e.nodeChanged(this);
    }

  }

} 

答案 2 :(得分:0)

你做一个接口或使用java的默认观察者接口。我建议你实现你的观察者。

interface INodeListener{
void update(Object obj);
}

节点侦听器应该实现此接口。在你的节点中你应该保持它的监听器。当改变Node make invoke listener方法时。

    public void invokeListener() {
       for(INodeListener listener:listeners)
        listener.update(yourVariable);
    }