单例模式概念
在面向对象的编程中,要求一个类有且仅存在一个实例,提供一个全局的访问方法,避开构造函数,提供一种机制来实现单一实例,
这就是单例模式(Singleton模式)。另因为在as3中无法操作线程,因此我们无需考虑多线程情况下的单例。
单例模式分为懒汉式和饿汉式,懒汉式就是延加载即需要时才创建对象,饿汉式就是定义全局变量时就创建对象;
对于多线程语言推荐使用饿汉式。
---------------------------------------------------------------下边列出as的几种单例模式------------------------------------
单例模式1:饿汉模式
package com.singleton.example { public class Singleton1 { private static var _instance:Singleton1 = new Singleton1(); public function Singleton1() { if(_instance) { throw new Error("只能用getInstance()来获取实例"); } } public static function getInstance():Singleton1 { return _instance; } } }
单例模式2:懒汉模式
package com.singleton.exmaple { public class Singleton5 { private static var _singleton:Singleton5 = null; public function Singleton5() { if(_singleton == null) { trace ("ok"); } else { throw new Error("do not function"); } } public static function getInstance():Singleton5 { if(_singleton == null) { _singleton = new Singleton5(); } return _singleton; } public function doSomething():void { trace ("dosomething"); } } }
单例模式3:内部类
package com.singleton.exmaple { public class Singleton4 { private static var _instance:Singleton4; public function Singleton4($singletoner:Singletoner) { if($singletoner == null) { throw new Error("只能用getInstance()来获取实例"); } } public static function getInstance():Singleton4 { if(_instance == null) { _instance = new Singleton4(new Singletoner()); } return _instance; } } } internal class Singletoner { }
单例模式4:设置标志位
package com..singleton.example { public class Singleton2 { private static var _singleton:Boolean = true; private static var _instance:Singleton2; public function Singleton2() { if(_singleton) { throw new Error("只能用getInstance()来获取实例"); } } public static function getInstance():Singleton2 { if(_instance == null) { _singleton = false; _instance = new Singleton2(); _singleton = true; } return _instance; } } }
单例模式5:回调函数
package com.singleton.example { public class Singleton3 { private static var singleton:Singleton3; public function Singleton3(caller:Function=null) { if(caller != hidden) { throw new Error("只能用getInstance()来获取实例"); } if(Singleton3.singleton != null) { throw new Error("只能用getInstance()来获取实例"); } } public static function getInstance():Singleton3 { if(singleton == null) { singleton = new Singleton3(hidden); } return singleton; } private static function hidden():void { } } }
相关推荐
单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在程序运行过程中,对于某个类,全局只有一个实例存在。这种模式在资源管理、配置对象或者全局缓存等场景中非常常见。在ActionScript...
- 注意单例模式在控制器和模型中的应用。 5. AS3垃圾回收: - 早期的引用计数法,后改为标记法,从根节点遍历所有引用并标记,未被标记的对象被视为可回收。 6. Flex与后台交互: - Remote Object:用于调用...
2. **公共接口和单例模式**:创建一个公共接口或单例类,模块可以通过这个接口或单例对象进行通信。接口定义了方法和属性,而单例确保在整个应用程序中只有一个实例,这样多个模块就可以安全地访问和修改共享数据。 ...
- `CairngormEventDispatcher`是事件分发器,用于分发事件,它继承自Flex的`EventDispatcher`类,采用单例模式。`CairngormEvent`是所有事件的基类,可以根据不同类型的事件创建子类,并定义需要传递的数据。触发...
例如,全局变量、静态变量和单例模式创建的对象容易导致内存泄露,因为它们的生命周期较长,可能会持续引用不再使用的对象。此外,当对象作为参数传递给方法并在方法内部创建新的引用,如果没有正确地解除引用,也会...
【标题】:“Flex截图”指的是使用Adobe Flex技术进行屏幕...可能涉及单例模式、工厂模式等设计模式。 通过以上知识点的学习和实践,开发者可以熟练掌握在Flex环境中实现截图功能,提升富互联网应用程序的用户体验。
本书深入浅出地介绍了多种常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、适配器模式、策略模式等。这些模式不仅有助于提升代码的可读性和可维护性,还能提高开发效率,降低系统复杂度。 1. **...
与Cairngorm相比,PureMVC更注重模块化和可重用性,它使用了Multiton(多实例)模式来管理Model和Controller,而不是单例。PureMVC的核心组件包括:Model(模型)、View(视图)、Controller(控制器)、Proxy(代理...
面向对象模式可以提高代码的组织性和复用性,常见的设计模式如单例模式、工厂模式和观察者模式在Flex开发中都有广泛应用。 ### 32. Embed标签在处理图像时有何不足? Embed标签用于将资源直接嵌入到SWF文件中,这...
- **优化单例模式:** 对于单例模式创建的对象,确保它们持有的外部引用能够在不再需要时被正确释放。 总结来说,Flex应用中的内存泄露问题是由垃圾收集器无法识别的活动对象引用造成的。理解Flash Player虚拟机的...
常见的设计模式包括单例模式、工厂模式、观察者模式等。在AS3中,这些模式可以帮助开发者构建更健壮、易于理解和维护的代码结构。 例如,单例模式确保一个类只有一个实例,并提供全局访问点。这对于管理共享资源如...
1. 显示引用:开发者创建的显式引用,如全局变量、静态变量或单例模式下的对象引用,如果没有正确释放,会导致对象仍然被认为是“有效”的,即使它们在应用逻辑中已经不再使用。例如,如果一个静态变量持有对某个...
- 解释单例模式的概念及其实现方法,以及在实际开发中的应用场景。 - **工厂模式**(Factory)(Chapter 5) - 包括抽象工厂(Abstract Factory)和工厂方法(Factory Method)两种具体模式的讲解,帮助开发者...
ModelLocator采用单例模式,存储应用程序的数据。CairngormEvent是所有自定义事件的基类,用于传递数据。ICommand接口定义了命令类,它们处理业务逻辑。FrontController则作为整个系统的核心,协调各个组件的交互。 ...
在本例中,`ModelLocator`的单例模式就实现了简单的依赖注入,允许视图和控制器轻松访问共享的数据。 在实际项目中,Cairngorm还包括其他组件,如`Locator`用于服务和依赖的注册,以及`Proxy`和`Delegate`用于处理...
- 单例模式:用于确保一个类只有一个实例,如Application域中的Singleton服务。 - 命令模式:将请求封装为命令对象,便于管理和调度。 5. 性能优化: - 避免不必要的计算:在运行时减少计算量,特别是在循环中。...
它是单例模式的应用,确保在整个应用程序中只有一个 ModelLocator 实例,所有组件都可以共享和访问数据。 2. **CairngormEvent**:这是框架提供的基础事件类,所有自定义事件都应继承自它。事件通常用于在视图和...
- 设计模式介绍:单例模式、观察者模式等。 - 实现方法:通过类、接口等方式实现设计模式。 - 案例分析:具体应用场景及代码示例。 - **游戏开发基础**: - 游戏引擎选择:如Flixel等。 - 物理引擎集成:如Box...
- **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Flex中,这种模式通常用于实现共享资源或服务。 - **工厂模式**:定义创建对象的接口,让子类决定实例化哪一个类。这种模式使得Flex程序更易于...