YOUR FEEDBACK
andy.mulholland wrote: intriguing !!! We have full scale 'Mashup Factories' in Chicago USA and Utrec...


2008 East
DIAMOND SPONSOR:
Data Direct
Frontiers in Data Access: The Coming Wave in Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
Intel
Virtualization – Path to Predictive Enterprise
Green Hills
IT Security in a Hostile World
JBoss / freedom oss
Practical SOA Approach
GOLD SPONSORS:
Software AG
The Art & Science of SOA: How Governance Enables Adoption
PlateSpin
Effective Planning for Virtual Infrastructure Growth
Fujitsu
Automated Business Process Discovery & Virtualization Service
Ceedo
Workspace Virtualization
Click For 2007 West
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts
SYS-CON.TV
MXDJ TOP LINKS YOU MUST CLICK ON !


Macromedia Flash - How To Use the Singleton Design Pattern
A standardized solution to a common programming problem

Design patterns are standardized solutions to common programming problems. It's good to use design patterns for two simple reasons. First, it's faster (and many times better) to implement a time-tested design pattern as opposed to developing a custom solution. Second, collaboration with other developers increases when common practices are used.

The Singleton Pattern
The Singleton design pattern is one of the most widely known design patterns; and it's also one of the simplest. It's used to insure that a class is only instantiated once. The pattern also provides a global point of access to the sole instance of that class. Many classes have to be able to limit their instantiation to a single instance. For example, you may write a focus manager for you application. If you had two instances of the focus manager, they might conflict with each other and create race conditions. So it's essential that you have only one instance per application.

There are two goals for the Singleton pattern: one instance and global access. The global access point insures that all of your classes have access to that single instance. But the main task of the Singleton pattern is to ensure that there is only one instance of the class. That's why the Singleton pattern lets the class manage its own instantiation. Instead of creating an instance of the class by using a new keyword, outside access will be given via a static method that returns the lone instance of the class. If the instance doesn't exist then it creates the instance before returning the reference.

There are two things you must do to make the Singleton pattern work. The first is to use a static method to retrieve the instance of the class and a static property to store the instance. The static keyword indicates that the following method or property is created only once per class rather than being created in every instance of the class.

The second thing you must do is make the constructor private. A private constructor is rare in ActionScript. Since the constructor is private, instantiation can only happen in the class. By making the constructor private, you can insure that no one can instantiate your class outside of the static method.

The Singleton pattern may seem complex, but the code is actually simple. The following example contains all the code you would need to make your class follow the Singleton pattern:

class Singleton {
static private instance:Singleton;
private function Singleton() {}
static public function getInstance():Singleton {
if(instance == undefined) {
instance = new Singleton();
}
return instance;
}

The instantiation of a Singleton class is a little different from a normal class. Normally we'd call the constructor directly like this:

var foo:Singleton = new Singleton();

However, in the Singleton pattern our constructor is private so that code would fail. We must get the single instance of this class by calling the static getInstance method like this:

var foo:Singleton = Singleton.getInstance();

Singleton in Action
In the following example, we'll build a class for tracking the navigation history of a given application. We'll use the Singleton pattern so all of an application's navigational classes track this history information in a central location. An example of some navigational classes might be a menu bar, a link, or even a button. All of these objects will have to be able to track the application's history. But ultimately there can be only one navigation history for an application so we use the Singleton pattern. This class is simple. It will simply store a string to describe a history destination. Any variety of information your application may need to determine the history destination could substitute. Our class will contain one private array that will hold all of the items in our application's history. We will also have an addItem method for adding destination items to the history. Then we'll have previousItem and nextItem methods for going forward and backward in our history.

// History.as
class History {
private var historyItems:Array;
private var currentPosition:Number;
static private var instance:History;
private function History() {
historyItems = new Array();
}
static public function getInstance():History {
if(instance == undefined) {
instance = new History();
}
return instance;
}
public function addItem(item:String):Boolean {
if(item != historyItems[currentPosition]) {
if(currentPosition < (historyItems.length - 1)) {
historyItems = historyItems.slice(0,
(currentPosition + 1));
}
historyItems.push(item);
currentPosition = historyItems.length - 1;
return true;
}
return false;
}
public function get nextItem():String {
if(currentPosition != undefined && currentPosition <
(historyItems.length - 1)) {
return historyItems[++currentPosition];
}else {
return null;
}
public function get previousItem():String {
if(currentPosition != undefined && currentPosition > 0) {
return historyItems[--currentPosition];
}else {
return null;
}





About Danny Patterson
Danny Patterson is a Consultant specializing in Flash and Web technologies. Danny is a Partner and Author at Community MX (communitymx.com) and a member of Team Macromedia Flash. He is a Certified Advanced ColdFusion MX, Flash MX and Flash MX 2004 Developer. You can check out his weblog at DannyPatterson.com.

YOUR FEEDBACK
SYS-CON Belgium News Desk wrote: Macromedia Flash - How To Use the Singleton Design Pattern. Design patterns are standardized solutions to common programming problems. It's good to use design patterns for two simple reasons. First, it's faster (and many times better) to implement a time-tested design pattern as opposed to developing a custom solution. Second, collaboration with other developers increases when common practices are used.
LATEST FLEX STORIES & POSTS
As a speaker at the upcoming AJAX World RIA Conference & Expo, I just received an email from Lindsay over at SYS-CON Events. She just informed me about the coupon code "spkrguestbootcamp" (lower case) that I can use to invite three guests with. I am not planning to bring anyone with me...
Director of Ribbit's Developer Platform, Chuck Freedman, will explore an evolution in web communication. With the growing demand of RIA and voice-over-the-web solutions, developers finally have a full suite of communication APIs to add to Flash. Coding with Ribbit, Freedman will demons...
Hoffman will give a review of traditional web security and explain the intracacies of Resource enumeration attacks in great detail, Injection attacks, and session hijacking as well as a step by step walk through of hacking an AJAX travel site. The intensive, one-day, hands-on training ...
Kevin Lynch, who will be keynoting on October 21, 2008, helped originally coin the term "Rich Internet Application" in 2002. He has been at the center of innovation in Flash and Adobe AIR since their inception, and currently drives Adobe’s technology platform for designers and develo...
Enterprises are enthusiastically embracing the shift from traditional client/server computing to SaaS. Inspired by customers who have embraced the web, developers are using RIA tools to create innovative new on-demand business applications. One important factor in the shift from tradit...
Rich Internet Applications offer the potential to fundamentally change the user experience and in doing so, yield significant business benefits. The theme of this October's AJAX World Conference & Expo 2008 West is 'Beyond AJAX to the RIA Era' and the Call for Papers, which is still op...
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021


SYS-CON FEATURED WHITEPAPERS

ADS BY GOOGLE