单例设计模式 (初步认知)

43 阅读2分钟

解决一个类在内存中只有一个对象,想要保证对象的唯一,为了避免不一致状态

单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

实现步骤:
1、将构造函数私有化
2、在类中创建一个私有的本类对象
3、提供一个用类名调用的公有方法获取该对象。

饿汉式:不管用不用,先实例化唯一的对象,消耗内存。

//饿汉式     在类初始化时,已经自行实例化
//1、将构造函数私有化。因为实例化会调用这个构造函数来进行初始化。
private LunGe(){

}
//2、在类中创建一个私有的本类对象,创建这个类要保证能够被共享,能够被其他类使用
private static LunGe s = new LunGe();

//3、提供一个用类名调用的公有方法获取该对象。
public static LunGe getLunGe(){
    //保险,防止空指针报错
    if(s == null){
        s = new LunGe();
    }
    return s;
}

懒汉式:用的时候再实例化唯一的对象,不用的使用节约内存(懒加载)

//懒汉式       在第一次调用的时候实例化自己
//1、将构造函数私有化。因为实例化会调用这个构造函数来进行初始化。
private LunGe(){

}
//2、在类中创建一个私有的本类对象,创建这个类要保证能够被共享,能够被其他类使用
private static LunGe s = null;

//3、提供一个用类名调用的公有方法获取该对象。
public static LunGe getLunGe(){
    //保险,防止空指针报错
    if(s == null){
        s = new LunGe();
    }
    return s;
}

调用LunGe类中的getLunGe()。

public class SingletonMode {


    public static void main(String[] args) {
        LunGe l1 =  LunGe.getLunGe();
        LunGe l2 = LunGe.getLunGe();
        l1.setName("伦哥一号");
        l2.setName("帅气的伦哥");
        System.out.println(l1);
        System.out.println(l2);
        System.out.println(l1 == l2);
        System.out.println(l1.getName());  //帅气的伦哥

    }

}

参考:
JAVA设计模式之单例模式