单件模式用于限制类的实例化次数,使你在系统的任何位置都能访问到同一个实例;达到节省资源,管理方便的效果。
单件模式的应用
从一个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
…
Однако …