【设计模式】Java设计模式第二课之单例模式

单例模式是自打我知道设计模式这个名词之后,第一个听说的一个具体的设计模式.它的使用情景是有一些关键性资源只允许产生一个实例.如果有多个实例产生的话,就会对我们的实际情况产生许多干扰.


以下是我在看书的过程中总结的几个要点:

  • 确保一个类只有一个实例,并提供一个全局访问实例.
  • 在Java中实现单例模式需要一个私有的构造方法,一个静态方法和一个静态实例.
  • 确定在性能和资源上的限制,然后小心的选择适当的方案来实现单例,以解决多线程问题(我们必须认定所有的程序都是多线程的)
  • 如果使用了多个类加载器,可能导致单例失效,产生多个实例
  • 单例模式分为两种:懒汉模式和饿汉模式
  • 懒汉模式:加载类的时候比较快,但是运行时获取对象的速度比较慢,因为在创建单例类的时候没有创建类的对象.是线程不安全的.要在getInstance()方法上加上syncronized关键字,如果为了效率的话需要加上双重锁定
  • 饿汉模式:加载类的时候比较慢,但是运行时获取对象的速度比较快.因为在创建单例类的时候创建了类的对象.是线程安全的.


以下是用Java实现的懒汉模式和恶汉模式的代码:


懒汉模式

public class LazySingleton {  
    //私有静态对象,加载时候不做初始化  
    private static LazySingleton m_instance = null;  
    //私有构造方法,避免外部创建实例  
    private LazySingleton(){}  
    //静态工厂方法,返回此类的唯一实例。当发现实例没有初始化的时候,才初始化。  
    synchronized public static LazySingleton getInstance(){  
        if (m_instance==null) {  
            m_instance = new LazySingleton();  
        }  
        return m_instance;  
    }  
}  


饿汉模式

public class HungerSingleton {  
    //私有的唯一(static final)实例成员,在类加载的时候就创建好了单例对象  
    private static final HungerSingleton m_instance=new HungerSingleton();  
    //私有构造方法,避免外部创建实例  
    private HungerSingleton(){}  
    //静态工厂方法,返回此类的唯一实例  
    public static HungerSingleton getInstance(){  
        return m_instance;  
    }  
}  


单例模式本身的代码量是很少的,但是代码量少并不代表它很简单,要想理解它的真正思想,还要多运用多思考.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值