单例模式就是整个系统中这个类只能实例化一次,不允许重复实例化。
单例模式主要就是怎么才能实例化一次?主要就是用静态方法objk了。
单例模式实现的方式分为两种:
- 懒汉式
- 饿汉式
懒汉式实现:
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {
private Singleton() {}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
饿汉式实现:
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
两个的区别只是初始化的时间不同,但是懒汉式有个问题就是线程并发造成问题,这个可以用下面的方法解决。
//在getInstance方法上加同步
public static synchronized Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}