单例模式就是确保一个类只有一个实例,并向整个系统提供这个实例。
分为两种模式,一种是懒汉式,一种是饿汉式。
懒汉式是在获取实例化的对象的时候,首先判断单例类中的静态对象是否为null,如果是null,则new出来一个,如果不是就返回那个对象。
饿汉式区别与懒汉式的不同点在于饿汉式不用判断那个静态的单例类中的静态对象是否为null,而是直接申明这个对象的时候就将其 new出实例化对象。
懒汉式相较于饿汉式多了判断是否为空这一步,所以在多线程的时候会有并发的问题,而饿汉式相对来说相率较高并且不用考虑并发问题。
//懒汉式
class Lazyer {
private static Lazyer lazyer;
private Lazyer() {
}
public static Lazyer getInstance() {
if (lazyer == null) {
lazyer = new Lazyer();
return lazyer;
} else {
return lazyer;
}
}
}
public class LazyMan {
public static void main(String[] args) {
Lazyer la = Lazyer.getInstance();
System.out.println(la);
Lazyer la2 = Lazyer.getInstance();
System.out.println(la2);
}
}
//饿汉式
class Hunger{
private static Hunger hunger = new Hunger();
private Hunger(){}
public static Hunger getInstance(){
return hunger;
}
}
public class HungryMan {
public static void main(String[] args) {
Hunger hu = Hunger.getInstance();
Hunger hu2 = Hunger.getInstance();
System.out.println(hu);
System.out.println(hu2);
}
}