<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kimkijeung.com &#187; template method</title>
	<atom:link href="http://kimkijeung.com/tag/template-method/feed/" rel="self" type="application/rss+xml" />
	<link>http://kimkijeung.com</link>
	<description>Interactive development,flash,Actionscript,Unity</description>
	<lastBuildDate>Sun, 24 Apr 2011 18:59:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Buttons using a Design Pattern</title>
		<link>http://kimkijeung.com/2007/06/28/buttons-using-a-design-pattern/</link>
		<comments>http://kimkijeung.com/2007/06/28/buttons-using-a-design-pattern/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 04:09:43 +0000</pubDate>
		<dc:creator>vkimone</dc:creator>
				<category><![CDATA[Flash-AS2.0]]></category>
		<category><![CDATA[Programming-OOP&OOD]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[template method]]></category>

		<guid isPermaLink="false">http://vkimone.inblog.kr/?p=466</guid>
		<description><![CDATA[flash에서 구현되는 대부분의 사용자와의 Interaction 은 버튼을 통해 이루어 진다. 즉, 버튼을 통해 이벤트가 발생되고 그것을 통해 필요한 반응들을 처리하게 된다. 일반적으로 flash 에 버튼을 설정할때는 아래와 같이 직접 이벤트 핸들러 함수를 등록하여 사용한다. button.onRelease=function(){  //code&#8230;.} 하지만 이런 방법은 무비클립이나 버튼 자체에 코드가 종속되어 버리게 되어, 제어해야할 버튼이 많을 경우 이곳저곳에 이벤트 핸들러 함수를 작성해야하므로 [...]]]></description>
			<content:encoded><![CDATA[<p>flash에서 구현되는 대부분의 사용자와의 Interaction 은 버튼을 통해 이루어 진다.<br />
즉, 버튼을 통해 이벤트가 발생되고 그것을 통해 필요한 반응들을 처리하게 된다.<br />
일반적으로 flash 에 버튼을 설정할때는 아래와 같이 직접 이벤트 핸들러 함수를 등록하여 사용한다.</p>
<p>button.onRelease=function(){  //code&#8230;.}</p>
<p>하지만 이런 방법은 무비클립이나 버튼 자체에 코드가 종속되어 버리게 되어, 제어해야할 버튼이 많을 경우 이곳저곳에 이벤트 핸들러 함수를 작성해야하므로 체계적인 이벤트 플로우를 관리하기 위해서 좀 부족한 감이 든다.<br />
또한 버튼은 단독으로 한개가 있는것보다는 여러개의 버튼이 컨텐츠의 네비게이션으로서 작용하는 경우가 대부분이다. 따라서, 버튼을 릴리즈 했을 경우 활성/비활성되는 부분도 고려해야하는 문제가 있다.</p>
<p>여기에서 소개하는 방법은 Design pattern 중에 Template method 패턴을 활용하여 버튼 로직을 구현하는 부분을 구현하고 실제적인 기능을 담당하는 부분은 추상클래스의 상속을 통해 구현하는 방법을 사용하였다.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="50" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="menu" value="false" /><param name="src" value="/blog/wp-content/uploads/2007/06/buttonManager.swf" /><embed type="application/x-shockwave-flash" width="500" height="50" src="/blog/wp-content/uploads/2007/06/buttonManager.swf" menu="false"></embed></object></p>
<p>기본적인 개념은 추상클래스 타입을 확장하여 각각의 구상클래스로서 버튼클래스를 제작한다.<br />
그리고 추상클래스 타입을 이용해 작성된  ButtonManager class 에 버튼 클래스를 등록한다.<br />
여기서 ButtonManager class 는 버튼 등록, 활성/비활성 체크 같은 전체적인 버튼을 관리하는 역할을 담당하게 된다.<br />
(* 이곳에 사용된 startEvent 메소드는 기본적으로 제공하는 Dispatcher 클래스의 dispatchEvent 메소드를 재정의 한것이다. )</p>
<p><strong>&lt;AbstractSimpleButton Class&gt;<br />
</strong>버튼 추상 클래스로써 생성하는 모든 버튼에 공통적으로 상속되는 클래스이다.<br />
이곳에 선언된 추상메소드를 구상클래스에서 오버라이드(override)하여 실제적인 기능을 구현한다.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">Dispatcher</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">Delegate</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">AbstractSimpleButton</span> <span style="color: #0066CC;">extends</span> Dispatcher <span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _mc:<span style="color: #0066CC;">MovieClip</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setController<span style="color: #66cc66;">&#40;</span>inMc : <span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
_mc=inMc;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">MovieClip</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">return</span> _mc;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">/**---------------------------------------------------------------------------
* Constructor function
* @param inMc controller movieClip
*---------------------------------------------------------------------------*/</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>inMc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
setController<span style="color: #66cc66;">&#40;</span>inMc<span style="color: #66cc66;">&#41;</span>;
setButton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setButton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onRollOver</span>=Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onRollOver</span><span style="color: #66cc66;">&#41;</span>;
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onRollOut</span>=Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onRollOut</span><span style="color: #66cc66;">&#41;</span>;
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onPress</span>=Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onPress</span><span style="color: #66cc66;">&#41;</span>;
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onRelease</span>=Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#41;</span>;
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onReleaseOutside</span>=Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onReleaseOutside</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOver</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOut</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onPress</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onReleaseOutside</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span>mode:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// override in sub-class</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><strong>&lt;ButtonManager Class&gt;</strong></p>
<p>추상클래스인 AbstractSimpleButton 클래스 타입을 이용하여 버튼의 등록및 이벤트 위임을 처리하고 있다.<br />
어떠한 구상클래스(concrete class)도 사용되지 않았기 때문에 실제 구현과 완전히 분리되어 코드를 처리할 수 있다.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">AbstractSimpleButton</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">ButtonEvent</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">Dispatcher</span>;
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">ButtonManager</span> <span style="color: #0066CC;">extends</span> Dispatcher<span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _buttonSet:<span style="color: #0066CC;">Array</span>;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _selectButton:AbstractSimpleButton;
&nbsp;
<span style="color: #808080; font-style: italic;">/**---------------------------------------------------------------------------
* Constructor function
*----------------------------------------------------------------------------*/</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ButtonManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//==================================================================</span>
<span style="color: #808080; font-style: italic;">///////////public method //////////////////////////////////////////////</span>
<span style="color: #808080; font-style: italic;">//==================================================================</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addItem<span style="color: #66cc66;">&#40;</span>item:AbstractSimpleButton<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
_buttonSet.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span>item<span style="color: #66cc66;">&#41;</span>;
registerListener<span style="color: #66cc66;">&#40;</span>item<span style="color: #66cc66;">&#41;</span>;
killListener<span style="color: #66cc66;">&#40;</span>item<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getItemAt<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">index</span>:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:AbstractSimpleButton<span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">return</span> AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>_buttonSet<span style="color: #66cc66;">&#91;</span><span style="color: #0066CC;">index</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> kill<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i <span style="color: #b1b100;">in</span> _buttonSet<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>_buttonSet<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> live<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i <span style="color: #b1b100;">in</span> _buttonSet<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>_buttonSet<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//==================================================================</span>
<span style="color: #808080; font-style: italic;">///////////event handler //////////////////////////////////////////////</span>
<span style="color: #808080; font-style: italic;">//==================================================================</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onPress</span><span style="color: #66cc66;">&#40;</span>evt:ButtonEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_PRESS</span>,evt.<span style="color: #0066CC;">target</span>,evt.<span style="color: #006600;">currentMovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#40;</span>evt:ButtonEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span>getSelectButton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span>AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
setSelectButton<span style="color: #66cc66;">&#40;</span>AbstractSimpleButton<span style="color: #66cc66;">&#40;</span>evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,evt.<span style="color: #0066CC;">target</span>,evt.<span style="color: #006600;">currentMovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOver</span><span style="color: #66cc66;">&#40;</span>evt:ButtonEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OVER</span>,evt.<span style="color: #0066CC;">target</span>,evt.<span style="color: #006600;">currentMovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOut</span><span style="color: #66cc66;">&#40;</span>evt:ButtonEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OVER</span>,evt.<span style="color: #0066CC;">target</span>,evt.<span style="color: #006600;">currentMovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//==================================================================</span>
<span style="color: #808080; font-style: italic;">///////////private method //////////////////////////////////////////////</span>
<span style="color: #808080; font-style: italic;">//==================================================================</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> initialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
_buttonSet=<span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> setSelectButton<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">button</span>:AbstractSimpleButton<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
_selectButton=<span style="color: #0066CC;">button</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> getSelectButton<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:AbstractSimpleButton<span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">return</span> _selectButton;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> registerListener<span style="color: #66cc66;">&#40;</span>item:AbstractSimpleButton<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
item.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OVER</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OUT</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_PRESS</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> killListener<span style="color: #66cc66;">&#40;</span>item:AbstractSimpleButton<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> owner:ButtonManager=<span style="color: #0066CC;">this</span>;
item.<span style="color: #006600;">getController</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">onUnload</span>=<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
item.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OVER</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OUT</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_PRESS</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
item.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">button</span>:AbstractSimpleButton,mode:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">button</span>.<span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span>mode<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>event handler 함수를 보면 등록되어 있는 추상클래스 버튼에서 발생한 이벤트를 받아서 다시 최종적으로 ButtonManager 에 등록되어있는 이벤트 리스너 함수로 넘겨준다. 이 과정에서 필요한 버튼 이벤트 오브젝만 넘겨준다.</p>
<p><strong>&lt;ButtonEvent Class&gt;<br />
</strong>버튼에 대한 이벤트 정보를 담고 있는 이벤트 오브젝트.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">ButtonEvent</span> <span style="color: #0066CC;">extends</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ON_ROLL_OVER:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;onRollOver&quot;</span>;
<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ON_ROLL_OUT:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;onRollOut&quot;</span>;
<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ON_PRESS:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;onPress&quot;</span>;
<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ON_RELEASE:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;onRelease&quot;</span>;
<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> <span style="color: #000000; font-weight: bold;">var</span> ON_RELEASE_OUTSIDE:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;onReleaseOutside&quot;</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> currentMovieClip:<span style="color: #0066CC;">MovieClip</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/**--------------------------------------------------------------------------
*constructor function
*@param Type : String, 이벤트 핸들러 메서드
*---------------------------------------------------------------------------*/</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ButtonEvent<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Type</span> : <span style="color: #0066CC;">String</span>,Source : <span style="color: #0066CC;">Object</span>,curMovieClip:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Type</span>,Source<span style="color: #66cc66;">&#41;</span>;
currentMovieClip=curMovieClip;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><strong>&lt;SampleConcreteButton  Class&gt;</strong></p>
<p>실제 버튼 기능을 구현하기 위한 구상 클래스. 단순히 버튼 롤오버 반응과 릴리즈시 활성체크를 구현하였다.<br />
생성하려는 버튼의 기능에 따라 이 클래스는 다르게 구성된다. 물론 추상메소드로서 작용하는<br />
AbstractSimpleButton 클래스의 onRollOver,onRollOut,onRelease,onReleaseOutside, enabled<br />
는 오버라이드(override) 하여 구현하여야 한다.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">AbstractSimpleButton</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">ButtonEvent</span>;
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">SampleConcreteButton</span> <span style="color: #0066CC;">extends</span> AbstractSimpleButton <span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> buttonIndex:<span style="color: #0066CC;">Number</span>;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> SampleConcreteButton<span style="color: #66cc66;">&#40;</span>inMc : <span style="color: #0066CC;">MovieClip</span>,inButtonIndex<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">super</span><span style="color: #66cc66;">&#40;</span>inMc<span style="color: #66cc66;">&#41;</span>;
buttonIndex=inButtonIndex;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOver</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OVER</span>,<span style="color: #0066CC;">this</span>,getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRollOut</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_ROLL_OUT</span>,<span style="color: #0066CC;">this</span>,getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,<span style="color: #0066CC;">this</span>,getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onReleaseOutside</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
startEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,<span style="color: #0066CC;">this</span>,getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">enabled</span><span style="color: #66cc66;">&#40;</span>mode:<span style="color: #0066CC;">Boolean</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">enabled</span>=mode;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>mode<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #66cc66;">&#123;</span>
getController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><strong>&lt;sample code&gt;<br />
</strong>위에서 제작한 클래스를 활용하여 버튼 클래스를 생성하고 등록하는 코드<br />
간단한 4개의 버튼을 구현하고 있다. 사용자는 SampleConcreteButton 를 만들어 버튼을 등록하기만 하면 모든 이벤트를 한꺼번에 관리할 수 있다.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">ButtonManager</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">AbstractSimpleButton</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">ui</span>.<span style="color: #0066CC;">button</span>.<span style="color: #006600;">SampleConcreteButton</span>;
<span style="color: #0066CC;">import</span> com.<span style="color: #006600;">dstrict</span>.<span style="color: #006600;">UB</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">ButtonEvent</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> buttonMgr:ButtonManager=<span style="color: #000000; font-weight: bold;">new</span> ButtonManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
buttonMgr.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,<span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
buttonMgr.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SampleConcreteButton<span style="color: #66cc66;">&#40;</span>number1_mc,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
buttonMgr.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SampleConcreteButton<span style="color: #66cc66;">&#40;</span>number2_mc,<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
buttonMgr.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SampleConcreteButton<span style="color: #66cc66;">&#40;</span>number3_mc,<span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
buttonMgr.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> SampleConcreteButton<span style="color: #66cc66;">&#40;</span>number4_mc,<span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">//event handler</span>
<span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#40;</span>evt:ButtonEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span><span style="color: #66cc66;">&#123;</span>
result_txt.<span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;onRelease event : &quot;</span>+evt.<span style="color: #006600;">currentMovieClip</span>+<span style="color: #ff0000;">&quot;-----&amp;gt;&quot;</span>+evt.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">buttonIndex</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//Release event</span>
<span style="color: #000000; font-weight: bold;">var</span> numberButton:AbstractSimpleButton=buttonMgr.<span style="color: #006600;">getItemAt</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
numberButton.<span style="color: #0066CC;">onRelease</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ButtonEvent<span style="color: #66cc66;">&#40;</span>ButtonEvent.<span style="color: #006600;">ON_RELEASE</span>,numberButton<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>위 코드에는 ButtonManager에 등록되어있는 리스너가 onRelease 이벤트 밖에 없기 때문에<br />
릴리즈 이벤트만 최종적으로 처리한다. 다른 버튼 이벤트를 처리하고 싶으면 리스너에 이벤트를<br />
추가 하여 이벤트 핸들러 함수만 구현하면 된다.</p>
<p>등록된 모든 이벤트는  ButtonManager 의 이벤트 핸들러 함수를 통해 전달된다. 따라서 버튼에 대한 이벤트 플로우를 한곳에 집중할 수 있으며 기존에 코드에 종속되어있는 버튼에 비해 유연성이 크게 향상된다.</p>
<p>sample code 에서 맨 마직막 부분의 release event 부분은 사용자가 마우스를 통해 버튼을<br />
클릭해서 release event 를 발생시키는 것이 아니라 직접 임의로 발생시킬 수 있다.</p>
<p><a href="/blog/wp-content/uploads/2007/06/buttonManager.zip" target="_self">download sample</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kimkijeung.com/2007/06/28/buttons-using-a-design-pattern/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

