【设计模式】-- 单例模式

2017-07-04  本文已影响0人  晴岚_Lanny

单例模式Singleton

  • 应用场合:有些对象只需要一个就足够了,如古代的皇帝、老婆

下定义,什么是饿汉懒汉式?

区别

  • 饿汉模式,类的加载比较慢,但是运行获取对象的速度比较快,线程是安全的

饿汉式

//饿汉模式
public class EagerSingleton {
    
    //1、将构造方法私有化,不允许外部直接创建对象
    private EagerSingleton() {
        
    }
    
    //2、创建类的唯一实例,使用private static变成为类的静态成员
    private static EagerSingleton instance = new EagerSingleton();
    
    //3、提供一个获取实例的方法,使用public static修饰
    public static EagerSingleton getInstance(){
        
        return instance;
    }

}

懒汉式

//懒汉模式
public class LazySingleton {
    
    //1、将构造方法私有化,不允许外部直接创建对象
    private LazySingleton() {
        
    }
    
    //2、创建类的唯一实例,使用private static变成为类的静态成员
    private static LazySingleton instance;
    
    //3、提供一个获取实例的方法,使用public static修饰
    public static LazySingleton getInstance(){
        
        if(instance == null){
            instance = new LazySingleton();
        }
        
        return instance;
    }

}

测试

//测试
public class TestSingleton {
    
    public static void main(String[] args) {
        
        //饿汉式
        EagerSingleton s1 = EagerSingleton.getInstance();
        EagerSingleton s2 = EagerSingleton.getInstance();
        
        if (s1 == s2) {
            System.out.println("s1和s2是同一个实例");
        }else{
            System.out.println("s1和s2不是同一个实例");
        }
        
        //懒汉式
        LazySingleton s3 = LazySingleton.getInstance();
        LazySingleton s4 = LazySingleton.getInstance();
        
        if (s3 == s4) {
            System.out.println("s3和s4是同一个实例");
        }else{
            System.out.println("s3和s4不是同一个实例");
        }
    }

}

输出结果

s1和s2是同一个实例
s3和s4是同一个实例
上一篇下一篇

猜你喜欢

热点阅读