AS3.0中单例模式的实现

实现单例模式(Singleton Pattern)的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时将该类的构造函数定义为私有方法(AS3.0不支持),这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。

单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。

 

下面是我在网上收集的AS3.0中单例模式的几种实现:

1、结合包外类的实现(主要用这条,后面几条只作思路,不推荐):

 1 package com.cnblogs.matrix42.singletonexample
 2 {
 3     public class Singleton
 4     {
 5         static private var _instance:Singleton;
 6         public function Singleton(singletonEnforcer:SingletonEnforcer)
 7         {  
 8             if (!singletonEnforcer)
 9             {
10                 throw new Error("Singleton is a singleton class");
11             }
12         }
13         public static function get instance():Singleton
14         {
15             Singleton._instance || (Singleton._instance = new Singleton(new SingletonEnforcer()));
16             return Singleton._instance;
17         }
18     }
19 }
20 
21 class SingletonEnforcer {}

 

2、

InstanceError类

 1 package com.cnblogs.matrix42.errors
 2 {
 3     public class InstanceError extends Error
 4     {
 5         public static const CONSTRUCTOR_ERROR:String = "ERROR";
 6         public function InstanceError(message:*="", id:*=0)
 7         {
 8             super(message, id);
 9         }
10     }
11 }

InstanceEnforcer类

 1 package com.cnblogs.matrix42.utils
 2 {
 3     import com.cnblogs.matrix42.errors.InstanceError;
 4     
 5     public class InstanceEnforcer
 6     {
 7         private static var num:uint;
 8         public static function enforceConstructor():void
 9         {
10             num++;
11             if (num >= 2)
12             {
13                 throw (new InstanceError(InstanceError.CONSTRUCTOR_ERROR));
14             }
15         } 
16     }
17 }

PressMouse类

 1 package com.cnblogs.matrix42.mouse
 2 {
 3     import com.cnblogs.matrix42.utils.InstanceEnforcer;
 4     import flash.events.EventDispatcher;
 5     
 6     final public class PressMouse extends EventDispatcher
 7     {
 8         public function PressMouse()
 9         {
10             InstanceEnforcer.enforceConstructor();
11         }
12         public static function instance():PressMouse
13         {
14             return new PressMouse();
15         }
16     }
17 }

 

3、

 1 package
 2 {
 3     public class Singleton
 4     {
 5         private static var _singletonModeMark:Boolean;
 6         private static var _instence:ScoreController;
 7         public static function getSingleton():Singleton
 8         {
 9             if (!_instence)
10             {
11                 _singletonModeMark = true;
12                 _instence = new ScoreController;
13                 _singletonModeMark = false;
14             }
15         }
16         public function Singleton():void
17         {
18             if (!_singletonModeMark)
19             {
20                 throw new Error("Error");
21             }
22         }
23     }
24 }

 

4、Cairngorm的Singleton实现

 1 package
 2 {
 3     public class BrickModel
 4     {
 5         private static var model:BrickModel;
 6         public static function getInstance():BrickModel
 7         {
 8             if(model == null)
 9             {
10                 model = new BrickModel();
11                 return model;
12             }
13         }
14         public function BrickModel()
15         {
16             if (BrickModel.model != null)
17             {
18                 throw new Error("Only one ModelLocator instance should be instantiated");
19             }
20         }
21     }
22 }

 

5、直接用静态定义类中的全部元素。

 

 

转载于:https://www.cnblogs.com/MATRIX42/archive/2012/08/03/2622365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值