单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证一个类只有一个实例而且该实例易于外界访问,从而方便对实例格式的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
分为两种模式
1.懒汉式
/**
* 单例模式类
* 懒汉式
* @author admin
*
*/
public class Singleton {
private Singleton(){
}
//全局对象
private static Singleton singleton=null;
public static Singleton getInstance(){
//判断全局对象是否为空
if (singleton==null) {
//如果为空,就创建对象
singleton=new Singleton();
}
//如果不为空,则直接返回该对象
return singleton;
}
public static void main(String[] args) {
Singleton singleton=Singleton.getInstance();
System.out.println(singleton.hashCode());
Singleton singleton2=Singleton.getInstance();
System.out.println(singleton2.hashCode());
}
}
2.饿汉式
/**
* 单例模式
* 饿汉式
* @author admin
*
*/
public class Singleton2 {
//跟懒汉式的区别:直接创建对象
private static Singleton2 singleton2=new Singleton2();
//私有构造
private Singleton2(){
}
public static Singleton2 getInstance(){
return singleton2;
}
public static void main(String[] args) {
Singleton2 singleton=Singleton2.getInstance();
System.out.println(singleton.hashCode());
Singleton2 singleton2=Singleton2.getInstance();
System.out.println(singleton2.hashCode());
}
}
懒汉式和饿汉式区别及优缺点
区别:
饿汉式不管有没有调用getInstance方法都会预先在系统中创建一个静态对象, 而懒汉式不会预先创建对象,只有在第一次调用时创建对象
饿汉式优点:
在多线程模式下是安全的
缺点:
没有调用方法前就被加载,会占用系统内存
懒汉式优点:
只有调用方法是才创建对象,调用前不会占用内存
缺点:
在多线程模式下不安全