2006년 4월 9일 일요일

Observer 패턴

Dean Edwards씨의 The window.onload Problem글의 댓글에 달린 글 중에서 Ian Darke씨가  쓴 Observer패턴을 이용한 구현입니다.

window.onloadListeners = new Array();

window.addOnLoadListener = function(listener) {
   window.onloadListeners[window.onloadListeners.length]=listener;
}

function init() {
      // quit if this function has already been called
if (arguments.callee.done) return;

      // flag this function so we don't do the same thing twice
arguments.callee.done = true;

      // iterates through array of registered functions
for (var i=0; i<window.onloadListeners.length; i++) {

       var func = window.onloadListeners[i];
       func();
   }
};
아직, javascript 문법에 익숙하지 않아서인지 몰라도 굉장히 단순하면서도 깔끔하다는 인상을 주는 구문이네요. Array에 function을 type으로 그냥 넣어버리고 실행하는 것도 var func로 빼내서 괄호추가 후 실행~ ^^
디버깅할 때는 곤란한 면도 많겠지만 나름대로 재미있군요. 다음의 코드는 listener를 추가하는 부분입니다.
window.addOnLoadListener(YourFunctionName);

댓글 4개:

  1. C 언어의 function pointer와 별반 차이가 없는데.

    자바에는 없어서 상대적으로 간결하게 만들 수 있지만.

    답글삭제
  2. C언어의 function pointer하고 비슷하지만 포인터가 없으므로 javascript가 좋죠~ ^^

    답글삭제
  3. 제가 잘못 본게 아니라면.. 아마 플래쉬의 액션 스크립트도.

    저런식으로 쓸 수 있을겁니다. ㅋㅋ

    답글삭제
  4. 플래쉬의 액션 스크립트도 ECMAScript를 base로 하고 있어서 당연히 쓸 수 있죠. ECMAScript만 하면 web관련해서는 거의 모든일을 할 수 있을듯 하네요.

    답글삭제