单例模式

如果系统中一个类最多只能存在一个实例时,我们必须需要单例模式。这种情况在我们应用中经常碰到的,例如缓存池,数据库连接池,线程池,一些应用服务实例等。在多线程的环境下面,为了保证实例的唯一性其实并不简单。
为了限制该类的对象被任意的创建,我们保证该类的构造方法是私用的,这样外部类就无法创建该类型对象了,另外为了给客户对象提供对单例对象的使用,我们为它提供一个全局访问点。

publci class Singleton{
     private static  Singleton instance = new Singleton();

     private Singleton(){}

     public static Singleton getInstance(){
            return instance;
    }
}

该类只有一个构造方法,但是是private修饰的,外部类不能使用该方法,创建该类的对象。
为此我们提供一个public static Singleton getInstance()方法,因为instance是私有属性,外部是无法访问的,通过该方法外部类可以创建该类的对象。此实现是线程安全的,当多个线程同时访问该类的getInstance()方法时,不会初始化多个不同的对象,只是因为jvm在加载此类时,对static属性初始化只能由一个线程执行一次。


如果需要出自性能考虑,我们希望延时创建该对象时候,只有第一次使用该对象时候才创建对象,我们只有在getInstance方法中进行处理就行了,只要在该方法中判断改对象是不是已经创建过,如果没有创建过就创建该对象,如果该对象已经存在就无需创建
publci class Singleton{
     private static Singleton instance = null;
     private Singleton(){}

     public static Singleton getInstance(){
            if(instance == null){
                   instance = new Singleton();
            }
            return instance;
    }
}

你可能感兴趣的:(单例模式)