/**
* 1.单例模式的定义:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
* 2.单例模式分为懒汉式单例(需要才去创建对象)和饿汉式单例(创建类的实例时就去创建对象)
*/
/**
* 饿汉式单例模式---属性实例化对象
*/
public class HungerSingletonTest {
private static final HungerSingletonTest singleton = new HungerSingletonTest();
//限制产生多个对象
private HungerSingletonTest() {
}
//通过该方法获得实例对象
public static HungerSingletonTest getInstance() {
return singleton;
}
//类中其他方法,尽量是static
public static void doSomething() {
}
}
/**
* 饿汉式单例模式---静态代码块实例化对象
*/
public class HungerSingletonTest {
private static HungerSingletonTest singleton;
static {
singleton = new HungerSingletonTest();
}
//限制产生多个对象
private HungerSingletonTest() {
}
//通过该方法获得实例对象
public static HungerSingletonTest getInstance() {
return singleton;
}
//类中其他方法,尽量是static
public static void doSomething() {
}
}
/**
* 懒汉式单例
*/
/**
* 线程不安全的单例
*/
public class LazySingleton {
private static LazySingleton lazySingleton;
private LazySingleton() {
}
public static LazySingleton getInstance() {
if (lazySingleton == null) {
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
/**
* 线程安全的单例---给方法前加锁
*/
public class LazySingleton {
private static LazySingleton lazySingleton;
private LazySingleton() {
}
public synchronized static LazySingleton getInstance() {
if (lazySingleton == null) {
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
/**
* 线程安全的单例---在方法内加锁
*/
public class LazySingleton {
private static LazySingleton lazySingleton;
private LazySingleton() {
}
public static LazySingleton getInstance() {
synchronized (LazySingleton.class) {
if (lazySingleton == null) {
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
}