读书笔记:ActionScript3设计模式中的单件模式

单件模式用于限制类的实例化次数,使你在系统的任何位置都能访问到同一个实例;达到节省资源,管理方便的效果。

单件模式的应用

从一个XML文件加载程序的基本配置信息,只需要在Flash初始化的时候或者Air程序启动的时候执行一次即可,并且,在程序的整个运行阶段都只需要一个实例,并不需要建多个实例或者读取多次XML。
例如:用一个xml文件保存AIR应用程序配置信息,里面包含窗口起始位置,窗口的宽高。

<setting>
	<window x="100" y="100" width="300" height="400">
</setting>

单件模式的实现

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 _instance:Setting;
  • 公共静态方法,用于获取这个唯一实例,并且,在第一次执行时,创建这个唯一的实例
    public static function getInstance():Setting
  • 为了限制类的多次实例化,通常使用私有构造函数,由于在AS3里面不支持私有构造函数,于是通过在一个文件中添加多个类的办法创建一个“私有”类(SingletionEnforcer类只能被该文件中的主类所访问)。

继续实现这个Setting类的功能

需要从XML文件加载程序的基本配置信息,给这个Setting类增加一些功能,比如读取配置,保存配置。
具体代码没有一一实现,把结构写了出来~

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 {}

One Trackback

  1. By Joe on 2010年01月17日 at 20:30

    Однако

发表评论

Your email is never shared. Required fields are marked *

*
*