下班之前,给大家简单的讲述一下JavaScript最实用的设计模式用法---单例模式
单例模式
意思就是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 。
两种实现方式: 懒汉单例模式和饿汉式单例模式。
关键点:
1)一个类只有一个实例 。
2)它必须自行创建这个实例。
3)它必须自行向整个系统提供这个实例 。
先说Java单例模式是怎样实现的,
1. 懒汉单例模式(类加载时不初始化)
1 /**
2 *
3 * 文件名:Singleton.java
4 * 创建作者: 李航杰
5 * 创建日期:2012-2-22 上午下午06:47:25
6 */
7 public class Singleton {
8
9 //懒汉式单例模式
10 //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
11 private static Singleton instance=null;
12 private Singleton(){
13 //私有构造函数,防止外界初始化该对象
14 }
15 //静态,同步,公开访问点
16 public static synchronized Singleton getInstance(){
17 if(instance==null){
18 instance=new Singleton();
19 }
20 return instance;
21 }
22 }
2.饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)
1 /**
2 *
3 * 文件名:Singleton.java
4 * 创建作者: 李航杰
5 * 创建日期:2012-2-22 上午下午06:48:25
6 */
7 public class Singleton {
8
9 ////静态私有成员,已初始化
10 private static Singleton instance=new Singleton();
11 private Singleton(){
12 //私有构造函数,防止外界初始化该对象
13 }
14 //静态,不用同步(类加载时已初始化,不会有多线程的问题)
15 public static Singleton getInstance(){
16
17 return instance;
18 }
19 }
备注:优缺点已经详细注释了,废话不多说,赶下说一下JS的单例模式
/*
因为我们需要访问该类本身,比如可能有时候需要做 instanceof 判断等等。
实现单例很简单,只需在构造方法的内部对caller做一些限制就可以了,单例模式的最终目的不是不让new对象,而是只允许存在一个对象实例。
*/
将自己前阵子,写好游戏框架中,封装的导演类代码贴出来,如下代码
1 /**
2 * 创建一个单例导演类
3 *@author : LeeHonGee
4 * Create DateTime: 2012-1-13 上午11:40:52
5 *
6 */
7 function Director(){
8 Director.instance=this;
9
10 }
11 Director.getInstance=function(){
12 var instance;
13 if(Director.instance==null){
14 instance=new Director();
15 }else{
16 instance=Director.instance;
17 }
18 return instance;
19 }
好,大功告成,下班回去咯,保佑现在的公车不挤了,哈哈....
创建者:LeeHonGee 创建时间:2012-02-22 下午19:10