1、单例设计模式
作用/价值:保证某类的对象只有一个
具体步骤:
步骤一:私有化本类所有的构造方法
步骤二:在本类中创建唯一对象
步骤三:提供外界获取唯一对象的方式(公共的、静态的)
2、两种方式
饿汉式:
弊端:在类加载的过程中就会创建唯一对象,对象创建时机较早,有浪费内存的情况存在;
优点:就算在多线程环境下,也一定可以保证对象是唯一的;
懒汉式:
优点:在需要唯一对象的时候才会去创建对象,对象出现的时机不早也不晚,不会有浪费内存的情况;
弊端:在多线程环境下,可能不能保证对象是唯一的(需要上锁去解决这个问题);
具体代码如下:
/**
* 单例设计模式之饿汉式
* 弊端:在类加载的过程中就会创建唯一对象,对象创建时机较早,有浪费内存的情况存在
* 优点:就算在多线程环境下,也一定可以保证对象是唯一的
*/
public class Sun {
private Sun() {
}
//这里final修饰可以不用加
private static final Sun s = new Sun();
public static Sun getInstance() {
return s;
}
public static void test() {
System.out.println("单例模式之饿汉式");
}
}
/**
* 单例设计模式之懒汉式
* 优点:在需要唯一对象的时候才会去创建对象,对象出现的时机不早也不晚,不会有浪费内存的情况
* 弊端:在多线程环境下,可能不能保证对象是唯一的(需要上锁去解决这个问题)
*/
public class Moon {
private Moon() {
}
//这里可以不用赋值null,默认也会给null
private static Moon m = null;
public static Moon getInstance() {
if (m == null) {
m = new Moon();
}
return m;
}
public static void test() {
System.out.println("单例模式之懒汉式");
}
}
public class Main {
public static void main(String[] args) {
Sun s1 = Sun.getInstance();
Sun s2 = Sun.getInstance();
Moon m1 = Moon.getInstance();
Moon m2 = Moon.getInstance();
System.out.println(s1 == s2); //结果为true
System.out.println(m1 == m2); //结果为true
}
}