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 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锁的效率没有不加高。因此,推荐第一种直接在私有属性中生成实例。
单例模式的实现需要以下两个步骤:
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锁的效率没有不加高。因此,推荐第一种直接在私有属性中生成实例。
相关文章推荐
- 在 Java 中应用设计模式 -- Singleton
- java设计模式之Singleton(单态)
- java设计模式之单例模式Singleton
- Java的23种设计模式01-单例模式(Singleton)
- JAVA设计模式之三单例模式(Singleton)
- java设计模式之创建模式--singleton
- Java设计模式之单例模式(Singleton)在Android系统服务中的应用
- Java设计模式 —— 单例模式(Singleton)
- Java 设计模式之Singleton~~
- Java设计模式之单态模式(Singleton模式)介绍
- JAVA设计模式(03):创建型-单例模式(Singleton)
- Java设计模式透析之 —— 单例(Singleton)
- JAVA设计模式之三单例模式(Singleton)
- 设计模式(四)----- 单态模式(Singleton)----(JAVA版)
- Java设计模式-单例模式(Singleton)
- 浅谈Java设计模式(三)单例模式(Singleton)
- [设计模式] - 深入浅出单实例Singleton设计模式(Java版)
- JAVA设计模式一:---Singleton(单例模式)
- Java设计模式之创建型模式-单例模式(Singleton)
- Java设计模式透析之 —— 单例(Singleton)