Как реализовать этот шаблон наблюдателя? - PullRequest
1 голос
/ 19 марта 2010

У меня есть 4 класса, которые описывают диаграмму состояний. Node, Edge, ComponentOfNode и ComponentOfEdge.

ComponentOfEdge соединения от ComponentsOfNode. Node может иметь 0..n исходящих ребер. Edge может иметь только 2 Nodes.

Edge должен быть в состоянии предложить ComponentOfNode, но только с Nodes, который имеет Edge, в форме ComponentOfEdge.

Пользователь может изменить ComponentsOfNode. Мне нужно, чтобы это изменение распространилось на все Edges. Как бы я это сделал? Я ожидаю, что следует использовать шаблон наблюдателя.

Можете ли вы привести пример в псевдокоде, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 19 марта 2010

Вы знаете, в Java лучший пример шаблона Observer / Observable (и простоты использования в не-Swing-коде) - это троица propertyChange[Event/Listener/Support]. Это задокументировано (к сожалению, на примере Swing, что приводит к путанице) в официальном руководстве по Java .

0 голосов
/ 19 марта 2010

Привет, сделайте один интерфейс или используйте интерфейс наблюдателя по умолчанию в Java. Я советую вам реализовать ваш наблюдатель.

interface INodeListener{
void update(Object obj);
}

Node Listeners должен реализовывать этот интерфейс. в вашем узле вы должны держать его слушателем. При изменении метода прослушивания узла Node make invoke.

    public void invokeListener() {
       for(INodeListener listener:listeners)
        listener.update(yourVariable);
    }
0 голосов
/ 19 марта 2010

Observer - довольно простой шаблон. Все, что вам нужно, это реализовать метод в классе наблюдения, который вызывается наблюдаемым классом при изменении.

В вашем случае вы можете иметь:

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);
    }

  }

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...