2010-03-19 4 views
1

나는 상태 다이어그램을 묘사하는 4 개의 클래스를 가지고있다. Node, Edge, ComponentOfNodeComponentOfEdge.이 관찰자 패턴을 구현하는 방법은 무엇입니까?

ComponentOfEdge 화합물은 ComponentsOfNode이다. Node은 0..n 나가는 가장자리를 가질 수 있습니다. Edge은 2 Nodes 만 가질 수 있습니다.

EdgeComponentOfNode을 제공 할 수 있지만,해야 Edge이있는 경우에만 Nodes에서 것을 ComponentOfEdge의 형태이다.

사용자는 ComponentsOfNode을 변경할 수 있습니다. 이 변경 사항을 모두 Edges에 전달해야합니다. 나는 그것을 어떻게 할 것이냐? 관찰자 패턴을 사용해야합니다.

의사 코드로 예제를 제공해 주시겠습니까?

답변

2

Java에서 Observer/Observable 패턴의 가장 좋은 예는 (그리고 스윙 코드가 아닌 경우 사용할 수있는) propertyChange[Event/Listener/Support] 트리니티입니다. 공식 (Java tutorial)에 문서화되어 있습니다 (불행하게도 Swing 예제에서 혼동을 일으킴).

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

    } 

} 
0

안녕하세요 당신이 당신의 관찰자를 구현하는 하나의 인터페이스를 만들거나 자바의 기본 관찰자 interface.I 조언을 사용합니다.

interface INodeListener{ 
void update(Object obj); 
} 

노드 수신기는이 인터페이스를 구현해야합니다. 귀하의 노드에서 당신은 그것의 listener.Wind Node 변경하면 호출 수신기 메서드를 호출해야합니다.

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

registerListener (INodeListener listener)를 잊어 버렸습니다. – extraneon

+0

흠) – ibrahimyilmaz

관련 문제