Observer Pattern (수정)

|

옵저버패턴...수정에, 수정.. 최대한 이해될때까지!! 어제 올린 것에서 수정한 부분만 올려봅니다.
package
{
	public interface ISubject
	{
		function addObserver(_observer:AbstractObserver): void
		function removeObserver(_observer:AbstractObserver): void
		function notifyObservers(): void
		function setData(_item:Array): void
		function start(): void
	}
}

 

"네이버실시간인기검색어를 타이머 인터벌로 제공해주는 서브젝트" 란 임무를 맡은 subject 이기 때문에 클래스 네이밍도 바꿔봤구요.. 이름에 걸맞게 이녀석에게 타이머를 핸들하는 부분도 맡게 해주었습니다. 그리고 API부분은 기존에 INaverSubject 인터페이스는 삭제하고 NaverSearchSubject 도 네이밍을 NaverPopSearchWord 로 바꾸어주고 subject 에서 선언해주었습니다. 타이머를 이용해서 새로운 검색어를 얻어오는 부분은 전부 이곳에서 진행됩니다!.

package
{
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	
	public class NaverSearchData_on_TimerInterval implements ISubject
	{
		private var item:Array;	
		private var observerArray:Array;
		
		private var naverData:NaverPopSearchWord;
		private var timer:Timer;
		private var init_flag:Boolean = true;
		
		public function NaverSearchData_on_TimerInterval(): void
		{
			init();
		}
		
		private function init(): void
		{
			naverData = new NaverPopSearchWord();
			timer = new Timer(1000, 5);
			timer.addEventListener(TimerEvent.TIMER, timerHandler);
			timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
			timer.start();
			observerArray = new Array();
		}
 
		public function addObserver(_observer:AbstractObserver):void
		{
			observerArray.push(_observer);
		}
		
		public function removeObserver(_observer:AbstractObserver):void
		{
			var numberOfObserver:uint = observerArray.indexOf(_observer);
			
			if (numberOfObserver >= 0)
			{
				observerArray.splice(numberOfObserver, 1);
			}
		}
		
		public function notifyObservers():void
		{
			for each (var observer:AbstractObserver in observerArray)
			{
				observer.update(item);
			}
		}
		
		public function setData(_item:Array):void
		{
			this.item = _item;
			notifyObservers();
		}

		public function start(): void
		{
			naverData.initialize();
		}

		private function timerHandler(e:TimerEvent): void
		{
			if (init_flag)
			{
				setData(naverData.getData());
				init_flag = false;
			}
		}
		
		private function timerCompleteHandler(e:TimerEvent): void
		{
			naverData.initialize();
			setData(naverData.getData());
			timer.start();
		}
	}
}

 

subject 에서 타이머를 가지고 가는바람에 메인이 간단해졌습니다 +_+;

package
{
	import flash.display.Sprite;
	import flash.text.TextField;

	public class Main extends Sprite
	{
		public function Main(): void
		{
			init();
		}
		
		private function init(): void
		{
			var searchData:ISubject = new NaverSearchData_on_TimerInterval();
			var searchDisplay:AbstractObserver = new FavoriteSearchDisplay();
			
			searchData.addObserver(searchDisplay);
			searchData.start();
			addChild(searchDisplay);
		}
	}
}

 

음.. 여러모로 부족하기 때문에 최대한 이해를 하는게 저의 목표입니다. 또한 한번 더 생각해보기. 계속해서 물음표를 던져보기..으쌰!! 다음 패턴은 지금 책을 3~4번 읽고 있는데 좀만 더 읽어보고..^^;; 옵저버패턴과 마찬가지고 책의 예제로 정리후 알맞은 예제를 선택해봐야겠습니다.

'Design Pattern' 카테고리의 다른 글

Strategy Pattern  (0) 2009/06/19
Observer Pattern (수정)  (2) 2009/06/12
Observer Pattern  (0) 2009/06/11
Trackback 0 And Comment 2
prev | 1 ... | 2 | 3 | 4 | 5 | 6 | 7 | next