<?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>Vinothbabu&#039;s Desk! &#187; Design Patterns</title>
	<atom:link href="http://vinothbabu.com/tag/design-patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://vinothbabu.com</link>
	<description>When Smart becomes Dumb!</description>
	<lastBuildDate>Thu, 01 Mar 2012 10:38:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Design Patterns : Singleton Pattern</title>
		<link>http://vinothbabu.com/2010/04/15/design-patterns-singleton-pattern/</link>
		<comments>http://vinothbabu.com/2010/04/15/design-patterns-singleton-pattern/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 04:40:59 +0000</pubDate>
		<dc:creator>Sachin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Chess board]]></category>
		<category><![CDATA[Singleton Pattern]]></category>

		<guid isPermaLink="false">http://vinothbabu.com/?p=283</guid>
		<description><![CDATA[The Singleton pattern is very similar to creator pattern. This is very widely used pattern. Now a question might raise in the mind that why do we need this pattern and when it should be applied. Let us take a situation where you want to build a chess game. Where does the Singleton Pattern apply [...]]]></description>
			<content:encoded><![CDATA[<p>The Singleton pattern is very similar to creator pattern. This is very widely used pattern. Now a question might raise in the mind that why do we need this pattern and when it should be applied. Let us take a situation where you want to build a chess game. Where does the Singleton Pattern apply here?<span id="more-283"></span></p>
<p>chessboard is one, which is a square-checkered board with 64 squares arranged in an eight-by-eight grid. At the start, each player controls sixteen pieces: one king, one queen, two rooks, two knights, two bishops, and eight pawns. The object of the game is to checkmate  the opponent&#8217;s king, whereby the king is under immediate attack (in &#8220;check&#8221;) and there is no way to remove or defend it from attack on the next move.</p>
<p>Here your chessboard is Singleton class as its state should never change. It means even at nth movement, the board should hold all the records of pieces moved and its state. Let us now drive back to technical discussion.</p>
<p>The Singleton pattern allows a class to only one instance and it does provide a global access to the instance. How do we go on to make a Singleton class.</p>
<blockquote><p>Sample code : SingletonClass.as</p>
<p>package com.sophiacom.as3.designpatterns.creational.singleton<br />
{<br />
public class SingletonClass<br />
{<br />
private static var _instance:SingletonClass;</p>
<p>public function SingletonClass(enforcer:SingletonEnforcer) {}</p>
<p>public static function getInstance():SingletonClass {<br />
if (SingletonClass._instance == null) {<br />
SingletonClass._instance = new SingletonClass(new SingletonEnforcer());<br />
}<br />
return SingletonClass._instance;<br />
}<br />
}<br />
}</p>
<p>class SingletonEnforcer {}</p>
</blockquote>
<p>First we are defining a private static property that holds the single instance of the class.<br />
Then we go with a public static function that provides access to the single instance created.<br />
A private constructor that restrict access in instantiating the class.</p>
<p>Oops ActionScript 3.0 does not have a private constructor! So, to do this, the solution is to force a parameter in the constructor while type isn&#8217;t accessible. Just with a class outer the package of the class but defined in the same file, because in ActionScript 3, only one class can be visible.</p>
]]></content:encoded>
			<wfw:commentRss>http://vinothbabu.com/2010/04/15/design-patterns-singleton-pattern/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introduction to MVP for Flex</title>
		<link>http://vinothbabu.com/2010/03/29/introduction-to-mvp-for-flex/</link>
		<comments>http://vinothbabu.com/2010/03/29/introduction-to-mvp-for-flex/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 13:46:00 +0000</pubDate>
		<dc:creator>Sachin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[MVP]]></category>

		<guid isPermaLink="false">http://vinothbabu.com/?p=231</guid>
		<description><![CDATA[I was today having a discussion with my amigos on the various design patterns and we were usually struck with mind blowing MVP pattern. I did a Bing on reseearch but could not eventually find a single article which explains the users very clear of this pattern. That&#8217;s the reason of this post. Many people [...]]]></description>
			<content:encoded><![CDATA[<p>I was today having a discussion with my amigos on the various design patterns and we were usually struck with mind blowing MVP pattern. I did a Bing on reseearch but could not eventually find a single article which explains the users very clear of this pattern. That&#8217;s the reason of this post.<span id="more-231"></span></p>
<p>Many people might initially get confused over the MVC [ Model, view and Controller ] and the MVP [ Model, View and Presenter ] pattern. There is a slight variation, but this pattern reduces the coupling.</p>
<p><strong>Model View and Control Pattern</strong></p>
<p><img class="aligncenter size-full wp-image-232" title="mvc" src="http://vinothbabu.com/wp-content/uploads/2010/03/mvc.png" alt="mvc" width="323" height="310" /><br />
In this pattern, view dispatches the events to the controller which in turn interacts with business logic of the application and the data binding techniques which updates the view automatically when ever there is a change in our model.</p>
<p><strong>Model View and Presenter Pattern</strong></p>
<p><img class="aligncenter size-full wp-image-233" title="MVP_Model4" src="http://vinothbabu.com/wp-content/uploads/2010/03/MVP_Model4.jpg" alt="MVP_Model4" width="400" height="228" /><br />
In this pattern, controller plays a major role in handling the user input and also an interaction with business logic also responsible of the update of the view. In this way there remains now link of view with Model and it totally relies on controller for all the presentation logic. As a result, there is no dependencies in either direction between the view and the model.</p>
<p>Let us now go through an example in RajiniKanth style. The below defines the the structure of our application.</p>
<p><img class="alignright size-medium wp-image-242" title="Structure" src="http://vinothbabu.com/wp-content/uploads/2010/03/Structure-300x230.jpg" alt="Structure" width="300" height="230" />The presenter folder contains the AdditionPresenter which acts as a controller handling the input and also does the business logic.</p>
<p>The view is area where our form is displayed with an <strong>Interface </strong>IAddView (implemented by the AdditionForm.mxml file) define  the methods we need in order to update the view and get the the numbers from the view to complete our <strong>Addition </strong>operation.</p>
<p>The <strong>MVPAddition.mxml</strong> is the main file, it only defines the custom component view.</p>
<blockquote><p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<br />
&lt;mx:Application xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; layout=&#8221;absolute&#8221; xmlns:view=&#8221;com.vinoth.MVP.view.*&#8221;&gt;<br />
&lt;view:AdditionForm/&gt;<br />
&lt;/mx:Application&gt;</p></blockquote>
<p>The Interfact IAddView defines the methods we need in order to update the view and get the numbers from the view. It is implemented by the AdditionForm.mxml</p>
<blockquote><p>package com.vinoth.MVP.view<br />
{<br />
public interface IAddView<br />
{</p>
<p>function set Number3(value:String):void;</p>
<p>function get Number1():Number;<br />
function get Number2():Number;</p>
<p>}<br />
}</p></blockquote>
<p>The AddView custom component contains the MXML tag needed to define the  UI and it calls the addData() method in the Presenter.</p>
<blockquote><p>&lt;mx:Label text=&#8221;Addition of Two Numbers&#8221; width=&#8221;100%&#8221; fontWeight=&#8221;bold&#8221;/&gt;</p>
<p>&lt;mx:Form width=&#8221;100%&#8221; height=&#8221;50%&#8221;&gt;<br />
&lt;mx:FormItem label=&#8221;Number One&#8221; width=&#8221;100%&#8221;&gt;<br />
&lt;mx:TextInput id=&#8221;_Number1&#8243; editable=&#8221;true&#8221; width=&#8221;100%&#8221; restrict=&#8221;0-9&#8243;/&gt;<br />
&lt;/mx:FormItem&gt;<br />
&lt;mx:FormItem label=&#8221;Number Two&#8221; width=&#8221;100%&#8221;&gt;<br />
&lt;mx:TextInput id=&#8221;_Number2&#8243; editable=&#8221;true&#8221; width=&#8221;100%&#8221; restrict=&#8221;0-9&#8243;/&gt;<br />
&lt;/mx:FormItem&gt;<br />
&lt;/mx:Form&gt;<br />
&lt;mx:HBox width=&#8221;100%&#8221;&gt;<br />
&lt;mx:Label text=&#8221;Result&#8221; /&gt;<br />
&lt;mx:Label width=&#8221;100%&#8221; id=&#8221;_Number3&#8243; /&gt;<br />
&lt;mx:Button label=&#8221;Add&#8221; click=&#8221;_presenter.addData()&#8221; /&gt;<br />
&lt;/mx:HBox&gt;</p></blockquote>
<p>It also contains the methods defined in the IAddView and a private  method that is registered as a listener for the creationComplete event  that initialize the presenter.</p>
<blockquote><p>import com.vinoth.MVP.presenter.AdditonPresenter;</p>
<p>private var _presenter:AdditonPresenter;</p>
<p>private function init():void{<br />
_presenter = new AdditonPresenter(this);<br />
}</p>
<p>public function get Number1():Number {<br />
return Number(_Number1.text);<br />
}</p>
<p>public function get Number2():Number{<br />
return Number(_Number2.text);<br />
}</p>
<p>public function set Number3(value:String):void{<br />
_Number3.text = value;<br />
}</p></blockquote>
<p>The presenter is the one which handles the business logic and updates the view through the interface without accessing the View Form.The presenter stores a private member of the view and it updates accordingly.</p>
<blockquote><p>public var _view:IAddView</p></blockquote>
<p>The Patter is simple but yet very powerful because of its least dependency and the presenter relies only on the interface and not on the UI.</p>
<p><a href="http://vinothbabu.com/Flex-Samples/MVP-Addition.rar" target="_blank">Application Souce</a></p>
]]></content:encoded>
			<wfw:commentRss>http://vinothbabu.com/2010/03/29/introduction-to-mvp-for-flex/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

