2013-06-27 3 views
1

다음과 같은 디자인이 있습니다 :
이벤트를 처리하는 데 필요한 몇 가지 객체를 처리하는 일련의 클래스가 있습니다.
각 클래스는 특정 유형의 이벤트 만 처리합니다.
이제 처리가 필요한 이러한 개체/이벤트가있을 때 모든 이벤트를 반복하고 모든 작업을 처리 할 때까지 루프 처리합니다.
내가 수행 한 유일한 최적화는 이벤트가 클래스 반환에 적합하지 않으면 immediatelly를 반환한다는 것입니다.
O(N^2) 루프를 제거하기 위해 디자인을 어떻게 변경할 수 있습니까? 아니면 아마도 가치있는 변화가 아니며 괜찮습니다.더블 루프 처리를 더 나은 것으로 변환하려면 어떻게해야합니까?

업데이트
algorith 코드 예 :

for(Event e:events) { 
    for(Processor p:processors) { 
     p.process(e); 
    } 
} 
+0

예제를 제공 할 수있는 방법이 있습니까? 아니면 약간의 의사 코드 또는 다른 것이 있습니까? 정확히 무슨 뜻인지를 말하기는 어렵습니다. 그러나 'O (N^2)'시간을 피하기 위해 할 수있는 일이 있다면, 특히 반복 할 물건이 많이 생기면 적어도 시도해야합니다. –

+3

옵저버는 내가 생각하는 것입니다. – nachokk

+0

@SamuelReid : 업데이트 된 OP – Jim

답변

5

당신은 옵저버 패턴을 구현할 수 있습니다. 각 프로세서는 객체를 관찰하고 이벤트를 수신합니다. 프로세서는 어떤 유형의 이벤트 였는지에 따라 이벤트를 처리할지 여부를 결정합니다.

Java는 실제로이 패턴에 대해 명시 적으로 의미하는 두 개의 인터페이스, ObservableObserver을 가지고 있습니다.

+0

차이점은 무엇입니까? '관찰자'패턴에서 관찰자가 모든 관찰자를 순차적으로 반복합니다. 그래서이 방법을 사용하면 이벤트 유형마다 다른 관찰 가능 성이 필요하므로 별도의 "대기열"에있는 모든 프로세서에서 모든 이벤트를 반복합니다. 내가 틀렸어? – Jim

+1

@ 짐 (Jim) - 옵서버는 관심있는 특정 객체/이벤트 만 구독한다는 이론입니다. 관심이있을 수도 있고 그렇지 않을 수도있는 전체 프로세서 풀이 아닌 등록 된 각 관찰자에 대해 반복적으로 루프를 진행합니다. 또한 모든 이벤트를 반복하지 않습니다. 이벤트는 외부 루프를 완전히 피하는 의미가있을 때만 발생합니다. –

+0

http://en.wikipedia.org/wiki/Observer_pattern 해당 이벤트에 등록한 옵저버에게만 알림이 전송되므로 프로세서를 특정 이벤트에 등록한 다음 해당 이벤트를 원하면 notifyObservers (일명 event.notifyObservers())를 호출하십시오. 특정 프로세서가 처리를 수행합니다. 이벤트 목록이있는 경우 모든 이벤트를 반복하면서 각 이벤트마다 notifyObservers를 호출하여 각 이벤트 당 모든 프로세서를 반복하고 해당 이벤트에 등록한 이벤트 만 조회해야하는 필요성을 피할 수 있습니다. – ARC

0

모든 이벤트 유형에 대해 특정 프로세서가있는 경우 맵 (EventClass -> EventProcessor)을 작성한 다음 지금 하나의 루프 - O (N)를 제거 할 수 있습니다.

+0

각 프로세서는 특정한 유형의 이벤트 만 처리합니다. –

관련 문제