<?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>FoxLing - 前端开发 &#187; 设计模式</title>
	<atom:link href="http://foxling.org/tag/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f/feed/" rel="self" type="application/rss+xml" />
	<link>http://foxling.org</link>
	<description>我还在寻找方向</description>
	<lastBuildDate>Tue, 10 Apr 2012 16:48:41 +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>读书笔记：ActionScript3设计模式中的单件模式</title>
		<link>http://foxling.org/as-flex-air/actionscript-3-singletion/</link>
		<comments>http://foxling.org/as-flex-air/actionscript-3-singletion/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 16:43:14 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[AS/Flex/AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://foxling.cn/?p=371</guid>
		<description><![CDATA[单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。 单件模式的应用 从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。 例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。 &#60;setting&#62; &#60;window x="100" y="100" width="300" height="400"&#62; &#60;/setting&#62; 单件模式的实现 package cn.foxling.test { public class Setting { private static var _instance:Setting; public function Setting(enforcer:SingletionEnforcer) { } public static function getInstance():Setting { if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer()); return Setting._instance; } } } class SingletionEnforcer {} 单件模式必须具体的3个元素 私有静态属性，用于存储唯一实例 private static var [...]]]></description>
			<content:encoded><![CDATA[<p>单件模式用于限制类的实例化次数，使你在系统的任何位置都能访问到同一个实例；达到节省资源，管理方便的效果。</p>
<h3>单件模式的应用</h3>
<p>从一个XML文件加载程序的基本配置信息，只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可，并且，在程序的整个运行阶段都只需要一个实例，并不需要建多个实例或者读取多次XML。<br />
例如：用一个xml文件保存AIR应用程序配置信息，里面包含窗口起始位置，窗口的宽高。</p>
<pre>
&lt;setting&gt;
	&lt;window x="100" y="100" width="300" height="400"&gt;
&lt;/setting&gt;
</pre>
<h3>单件模式的实现</h3>
<pre>
package cn.foxling.test
{
	public class Setting
	{
		private static var _instance:Setting;

		public function Setting(enforcer:SingletionEnforcer)
		{
		}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

	}
}

class SingletionEnforcer {}
</pre>
<p><span id="more-371"></span></p>
<h3>单件模式必须具体的3个元素</h3>
<ul>
<li>私有静态属性，用于存储唯一实例<br />
<code>private static var _instance:Setting;</code></li>
<li>公共静态方法，用于获取这个唯一实例，并且，在第一次执行时，创建这个唯一的实例<br />
<code>public static function getInstance():Setting</code></li>
<li>为了限制类的多次实例化，通常使用私有构造函数，由于在AS3里面不支持私有构造函数，于是通过在一个文件中添加多个类的办法创建一个“私有”类(SingletionEnforcer类只能被该文件中的主类所访问)。</li>
</ul>
<h3>继续实现这个Setting类的功能</h3>
<p>需要从XML文件加载程序的基本配置信息，给这个Setting类增加一些功能，比如读取配置，保存配置。<br />
具体代码没有一一实现，把结构写了出来~</p>
<pre>
package cn.foxling.test
{
	import flash.events.EventDispatcher;

	public class Setting extends EventDispatcher
	{
		private static var _instance:Setting;

		private var _x:Number;
		private var _y:Number;
		private var _width:Number;
		private var _height:Number;

		public function Setting(enforcer:SingletionEnforcer)
		{}

		public static function getInstance():Setting
		{
			if (Setting._instance == null) Setting._instance = new Setting(new SingletionEnforcer());
			return Setting._instance;
		}

		public function loadXML():void
		{
			//通过URLLoader读取xml信息
			//派发加载成功的事件
		}

		public function save():void
		{
			//将_x,_y,_width,_height格式化成xml
			//并写入本地文件
			//派发保存成功的事件
		}

		//================================
		//为_x,_y,_width,_height写setter、getter方法
		//避免对_x,_y,_width,_height设置非法值
		//================================

	}
}

class SingletionEnforcer {}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/as-flex-air/actionscript-3-singletion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

