单例模式的三种实现 以及各自的优缺点
2014-03-03 17:04
246 查看
单例模式:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式有三种:懒汉式单例,饿汉式单例,登记式单例。
1.懒汉式单例
public class Singleton {
private static Singleton singleton;
private Singleton() {} //此类不能被实例化
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁synchronized 才能保证单例,(如果两个线程同时调用getInstance方法,会chuxia)但加锁会影响效率。
2.饿汉式单例
public class Singleton {
private static final Singleton SINGLETON = new Singleton();
private Singleton() {} //此类不能被实例化
public static synchronized Singleton getInstance() {
return SINGLETON;
}
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。
3.登记式模式(holder)
public class Singleton {
private Singleton() {} //构造方法是私有的,从而避免外界利用构造方法直接创建任意多实例。
public static Singleton getInstance() {
return Holder.SINGLETON;
}
private static class Holder {
private static final Singleton SINGLETON = new Singleton();
}
内部类只有在外部类被调用才加载,产生SINGLETON实例;又不用加锁。此模式有上述两个模式的优点,屏蔽了它们的缺点,是最好的单例模式。
单例模式的优点和缺点:
单例模式有三种:懒汉式单例,饿汉式单例,登记式单例。
1.懒汉式单例
public class Singleton {
private static Singleton singleton;
private Singleton() {} //此类不能被实例化
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁synchronized 才能保证单例,(如果两个线程同时调用getInstance方法,会chuxia)但加锁会影响效率。
2.饿汉式单例
public class Singleton {
private static final Singleton SINGLETON = new Singleton();
private Singleton() {} //此类不能被实例化
public static synchronized Singleton getInstance() {
return SINGLETON;
}
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。
3.登记式模式(holder)
public class Singleton {
private Singleton() {} //构造方法是私有的,从而避免外界利用构造方法直接创建任意多实例。
public static Singleton getInstance() {
return Holder.SINGLETON;
}
private static class Holder {
private static final Singleton SINGLETON = new Singleton();
}
内部类只有在外部类被调用才加载,产生SINGLETON实例;又不用加锁。此模式有上述两个模式的优点,屏蔽了它们的缺点,是最好的单例模式。
单例模式的优点和缺点:
1 单例模式 只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等 2 单例的缺点 就是不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。 用单例模式,就是在适用其优点的状态下使用。
相关文章推荐
- 单例模式的三种实现 以及各自的优缺点
- 单例模式的三种实现 以及各自的优缺点
- 单例模式的三种实现 以及各自的优缺点
- 三种工厂模式的分析以及C++实现
- Java中四种常见的单例模式以及各自优缺点总结
- 三种工厂模式的分析以及C++实现
- LVS 三种工作模式原理、以及优缺点比较
- 三种工厂模式的分析以及C++实现
- delegate,notifucation,KVO三种模式实现通信的优缺点
- 三种工厂模式的分析以及C++实现
- 单例模式的几种实现方式和各自优缺点分析
- 三种工厂模式的分析以及C++实现
- 设计模式:单例模式的三种创建方式及其各自的优缺点
- java集合的三种遍历方式以及各自优缺点分析
- 讲解delegate,notifucation,KVO三种模式实现通信的优缺点
- Php与Apache的三种结合方式以及各自优缺点
- LVS 三种工作模式原理、以及优缺点比较
- 学习笔记-LVS的三种模式以及优缺点
- 讲解delegate,notifucation,KVO三种模式实现通信的优缺点
- LVS 三种工作模式原理、以及优缺点比较