Java-单例设计模式

设计模式

 可以重复利用的解决方案

 从结构上分为三类: 创建型、结构型、行为型

 

最简单的是单例模式

 优点:对象实例创建完成后,会放到堆中,如果堆中实例过多,会导致一些问题,如内存溢出等

 使用单例后只会创建一个实例,显著减少实例对象的个数,同时也会提高性能,因为不会频繁创建对象

 

 单例解决什么问题

 //1)保证JVM中某一类型的Java对象,永远只有一个

 //2)为了节省内存的开销

 

多个Java文件同时编译 javac *.java

Array array = new Array();
Array array1 = new Array();
if (array == array1){
     System.out.println(true);
}else  {
     System.out.println(false);
}
//false
/*
 == 如果两边都是基本数据类型,可以比较这两个基本数据类型是否相等
 == 如

实现单例模式:

//实现单例模式
//单例模式的要领:
//1)构造方法私有化;
//2)对外提供一个公开的静态的获取当前类型的对象的方法
//3)提供一个当前类型的静态变量


/*编译不通过(构造方法私有化)
Singleton singleton1 = new Singleton();
Singleton singleton2 = new Singleton();
System.out.println(singleton1 == singleton2);
 */
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
Singleton singleton3 = Singleton.getInstance();
System.out.println(singleton1 == singleton2);//输出 true
System.out.println(singleton2 == singleton3);//输出 true
//单例模式的要领:
//1)构造方法私有化;
//2)对外提供一个公开的静态的获取当前类型的对象的方法
//3)提供一个当前类型的静态变量

//单例模式分两种
//1.直接创建:在类加载阶段就创建对象
//2.懒加载创建:用到对象时,才创建
public class Singleton {

    //静态变量
    private static Singleton singleton;

    //将构造方法私有化 空构造(如果我们没有自定义构造方法时,系统默认会有一个空构造)
    private Singleton(){}

    //对外提供一个公开获取 Singleton对象的方法
    public static Singleton getInstance(){
        if (singleton == null) {
            singleton = new Singleton();
        }
        return  singleton;
    }
}

//饿汉式单例
public class User {

    //类加载时,只执行一次
    private static User user = new User();

    //构造方法私有
    private User(){};

    //对外提供方法调用
    public static User getInstance(){
        return user;
    }
}

 

原文地址:https://www.cnblogs.com/StevenHuSir/p/Java_Singleton.html