您的位置:首页 > 编程语言 > Java开发

1.23种设计模式的Java版--Singleton(单例)

2011-03-03 22:50 363 查看
所谓的单例模式是指单个实例,单即单个的意思,例乃实例的意思,就是一个类生成的对象。因此,单例模式的功能作用就是保证一个类只生成一个对象,是在代码级的实现,不是人工维护的。
单例模式的实现需要以下两个步骤:

1.单例类有一个存贮单例的私有属性

2.单例类的构造方法必须是私有的

3.单例类要有获取单例类实例的静态方法

单例类示例:

饿汉式单例代码

package com.tao.pattern.singleton;

/**

* @author TaoistWar

*

*/

public class Singleton {

// 1.单例类有一个存贮单例的私有属性

private static Singleton singleton = new Singleton();

// 2.单例类的构造方法必须是私有的

private Singleton() {

}

// 3.单例类要有获取单例类实例的静态方法

public static Singleton getInstance() {

return singleton;

}

}

package com.tao.pattern.singleton;

/**
* @author TaoistWar
*
*/
public class Singleton {
// 1.单例类有一个存贮单例的私有属性
private static Singleton singleton = new Singleton();

// 2.单例类的构造方法必须是私有的
private Singleton() {
}

// 3.单例类要有获取单例类实例的静态方法
public static Singleton getInstance() {
return singleton;
}
}


懒汉式单例代码

package com.tao.pattern.singleton;

/**

*

* @author TaoistWar

*

*/

public class LazySingleton {

// 1.单例类有一个存贮单例的私有属性

private static LazySingleton singleton;

// 2.单例类的构造方法必须是私有的

private LazySingleton() {

}

// 3.单例类要有获取单例类实例的静态方法

public synchronized static LazySingleton getInstance() {

if (singleton == null) {

singleton = new LazySingleton();

}

return singleton;

}

}

package com.tao.pattern.singleton;

/**
*
* @author TaoistWar
*
*/
public class LazySingleton {
// 1.单例类有一个存贮单例的私有属性
private static LazySingleton singleton;

// 2.单例类的构造方法必须是私有的
private LazySingleton() {

}

// 3.单例类要有获取单例类实例的静态方法
public synchronized static LazySingleton getInstance() {
if (singleton == null) {
singleton = new LazySingleton();
}
return singleton;
}
}

比较:

饿汉式单例:加载时生成单例,获取单例时不需要考虑多线程

懒汉式单例:调用时生成单例,获取单例时如果多线程需要加synchronized锁定方法以保证单例。

结论:

因为在我们的开发中,如果使用单例模式,肯定会用到,废话!呵呵。所以,每次调用加个synchronized锁的效率没有不加高。因此,推荐第一种直接在私有属性中生成实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: