'Design Pattern'에 해당되는 글 4

  1. 2011/11/06 ruby EventDispatcher
  2. 2009/04/10 Thread Pool (6)
  3. 2009/03/08 Object Pool (11)
  4. 2008/08/08 MVC(Model-View-Controller) 디자인 패턴에 대한 좋은 아티클들 (5)
 
크리에이티브 커먼즈 라이선스
Creative Commons License
 
module EventDispatcher
	def setup_listeners
		@listeners = {}
		@change = false
	end

	def register_listener(listener, event)
		(@listeners[event] ||= []) << listener
	end

	def remove_listener(listener, event)
		(@listeners[event] ||= []).delete listener
	end

	def remove_listeners(event)
		@listeners[event] = []
	end

	def count_listeners(event)
		(@listeners[event] ||= []).size
	end

	def changed?
		@change
	end

	protected
	def notify(event, arg)
		return if not @change
		if @listeners[event]
			callback = ("update_at_" + event.to_s).to_sym
			@listeners[event].each do |listener|
				if listener.respond_to? callback
					listener.send callback, arg
				elsif listener.respond_to? :update
					listener.update event, arg
				end
			end
		end
		@change = false
		return nil	
	end

	def changed
		@change = true
	end
end	

class TestFactory
	include EventDispatcher
	
	def initialize
		setup_listeners
	end	

	def create_button(color)
		changed
		notify(:new_button, {:color => color})
	end

	def create_label(text)
		changed
		notify(:new_label, {:text => text})
	end
end

class TestWidgetCounter
	def initialize(widget_factory)
		@counts = Hash.new(0)
		widget_factory.register_listener(self, :new_button)
		widget_factory.register_listener(self, :new_label)
	end

	def update(event, arg)
		case event
		when :new_label
			puts "#{arg[:text]} label created."
		end	
	end

	def update_at_new_button(arg)
		color = arg[:color]
		@counts[color] += 1
		puts "#{@counts[color]} #{color} button(s) created."
	end
end



f = TestFactory.new
t = TestWidgetCounter.new(f)

f.create_button("red")
f.create_button("blue")
f.create_button("green")
f.create_label("name")
f.create_button("red")

f.remove_listener(t, :new_label)
f.create_label("cellphone")

f.create_button("blue")


Output:
1
2
3
4
5
6
1 red button(s) created.
1 blue button(s) created.
1 green button(s) created.
name label created.
2 red button(s) created.
2 blue button(s) created.


APE 0.50a 포팅할 때 사용하려고 만들었던 EventDispatcher
저작자 표시 비영리 동일 조건 변경 허락

'객체지향 프로그래밍 > 디자인 페턴' 카테고리의 다른 글

ruby EventDispatcher  (0) 2011/11/06
Thread Pool  (6) 2009/04/10
Object Pool  (11) 2009/03/08
MVC(Model-View-Controller) 디자인 패턴에 대한 좋은 아티클들  (5) 2008/08/08

댓글을 달아 주세요

Thread Pool

객체지향 프로그래밍/디자인 페턴 | 2009/04/10 18:42 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
루비로 구현한 스레드 풀

저번에 만들었던 오브젝트풀 http://www.filepang.co.kr/entry/Object-Pool 을 사용해서 만들어봤다.....근데 왠지 맘에 안든다능

더보기

저작자 표시 비영리 동일 조건 변경 허락

'객체지향 프로그래밍 > 디자인 페턴' 카테고리의 다른 글

ruby EventDispatcher  (0) 2011/11/06
Thread Pool  (6) 2009/04/10
Object Pool  (11) 2009/03/08
MVC(Model-View-Controller) 디자인 패턴에 대한 좋은 아티클들  (5) 2008/08/08

댓글을 달아 주세요

  1. Favicon of http://shieldhorizon.com BlogIcon PEPE 2009/04/20 00:56  댓글주소  수정/삭제  댓글쓰기

    디자인패턴,, 솔까말 배운지는 좀됫는데 써본건 거의없다능;;
    고로 휘발성... ㅋㅋㅋ
    잘지냄??

  2. Only 2011/12/08 15:50  댓글주소  수정/삭제  댓글쓰기

    잘쓰겠다능 ㅋㅋ

  3. Only 2011/12/08 16:52  댓글주소  수정/삭제  댓글쓰기

    난 왜 결과가 다르지
    GG 4
    GG 2
    GG 1
    GG 3
    GG 0
    "Main Thread!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" x10
    이러고 데드락 ㅠ
    ruby 1.9.3p0 (2011-10-30) [i386-mingw32]

Object Pool

객체지향 프로그래밍/디자인 페턴 | 2009/03/08 21:44 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
하악...오랜만에 OOP 관련 포스팅이라능.

오브젝트 풀은 어떤 객체를 생성하는데 자원이 굉장히 많이 필요하거나, 한정된 수의 인스턴스만 사용할 수 있을때 이넘들을 컬랙션에 집어넣고 관리할 수 있도록 해주는 패턴이라능. 물론 한번 만들어놓은 인스턴스를 계속 사용한다능

Socket, DB connection 등에 많이 쓴다는데...난 저런거랑은 별로 친하지가 않아서 잘 모르겠고....식당에있는 테이블을 생각해보면 된다능. 식당에는 딱 한정된 수의 자리만있는데 손님이 오면 빈자리를 내어준다능. 자리가 업ㅂ으면 빈자리가 생길 때 까지 기둘렸다 손님한태 자리를 내어주는데, 이 경우에 식당은 일종의 오브젝트 풀로 의자를 관리하구 있는거심.

자질구래한 얘기는 대충 끝내고 허접하지만 일단 코드를 보자능.

더보기



 풀에 담을 수 있는 인스턴스의 총 수를 결정할 수 있구 풀이 꽉찼을경우 대기 시간을 초단위로 설정할 수 있게 되있심. 풀에서 객체를 꺼내주기 직전에 유효성검증을 수행하고 실패할경우 뭉게버리고 다시 만들어 주도록 되있다능. 식당으로 비유하면 더러운 테이블을 깔끔히 닦아내고 손님한태 내어주는거랑 비슷하다고 보면 되겠심. 물론 하기 싫으면 안해도 된다능. >_<


테스트 코드라능

더보기



 풀의 크기는 9로 했고 대기시간은 5초로 했다능(0으로 넣어도 되심). 시작하자마나 풀을 꽉채우고 스레드 th1에서 다시 한개를 더 요청한다능. 풀에서 꺼내줄깨 업ㅂ으니까 대기시간 5초동안 대기하게 되는데 스레드 th2에서 2초있다가 5개를 반환에 준다능.  실행시켜보면 쪼금 기둘리다가 마지막 한줄을 찍고 끝날꺼라능
저작자 표시 비영리 동일 조건 변경 허락

'객체지향 프로그래밍 > 디자인 페턴' 카테고리의 다른 글

ruby EventDispatcher  (0) 2011/11/06
Thread Pool  (6) 2009/04/10
Object Pool  (11) 2009/03/08
MVC(Model-View-Controller) 디자인 패턴에 대한 좋은 아티클들  (5) 2008/08/08

댓글을 달아 주세요

  1. Favicon of http://eufonius.tistory.com BlogIcon prismatic 2009/03/09 05:22  댓글주소  수정/삭제  댓글쓰기

    쩝 아직 풀을 사용할 정도의 리소스가 필요한 작업은 해 본적이 없어서 나는 듣보잡인듯 ㅠㅜ

  2. Favicon of http://weisswine.egloos.com BlogIcon 잼아줌마 2009/03/09 10:06  댓글주소  수정/삭제  댓글쓰기

    님 이 블로그에서 공돌이 냄새가 심하게 나는데여

  3. -_- 2011/05/13 12:31  댓글주소  수정/삭제  댓글쓰기

    헐 검색하다 떴는데 아는넘 블로그니 신기하넹 'ㅅ'

  4. -_- 2011/05/13 18:26  댓글주소  수정/삭제  댓글쓰기

    덕후가 아니라서..'ㅅ';

크리에이티브 커먼즈 라이선스
Creative Commons License
http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html
Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller(MVC) - Steve Burbeck

http://www.cs.kau.se/~hannes/gui/resource/Model-View-Controller.pdf
You've got the model-view-controller - John Hun

http://www.dickbaldwin.com/java/Java200.htm
Implementing The Model-View-Controller Paradigm using Observer and Observable - Richard Baldwin

http://java.sun.com/blueprints/patterns/MVC-detailed.html
Sun의 자바 메뉴얼


세번째 아티클은 액티브 모델에 대한것임. 보기 쉬운거는 두번째가 가장 보기 쉽고
내용은 첫번째가 제일 좋았음. 하나빼고 다 자바임. 그나마 나머지 하나도 스몰토크 -_-;;

더러운 자바.


----------------------------------------------------------------------------------------------------
콜린 무크의 Flash Actionscript 2.0 3부 18장에서 제목들을 따왔심.
하지만 나는 액션스크립트의 p자도 모름(스몰토크랑 자바도 모름 아는게 업ㅂ다능).


책에 나온 MVC 패턴을 사용한 시계 소스코드


링크가 깨졌으면 구글에서 제목으로 검색을 하면 나올꺼심.

'객체지향 프로그래밍 > 디자인 페턴' 카테고리의 다른 글

ruby EventDispatcher  (0) 2011/11/06
Thread Pool  (6) 2009/04/10
Object Pool  (11) 2009/03/08
MVC(Model-View-Controller) 디자인 패턴에 대한 좋은 아티클들  (5) 2008/08/08

댓글을 달아 주세요

  1. Favicon of http://caster13.tistory.com BlogIcon 캐스터 2008/08/09 09:25  댓글주소  수정/삭제  댓글쓰기

    와.. 진정 ..이사람은 천재인것인가.....난 죽었다 깨나도 이사람 따라잡긴 글렀네...

  2. Favicon of http://flaxia-iii.tistory.com BlogIcon Kr015se 2008/09/16 07:39  댓글주소  수정/삭제  댓글쓰기

    자바는 이제 거의 OOP계의 메카로 자리잡은듯... 개인적으로는 전혀 맘에 들지 않지만 -_)