设计模式的定义
重复利用解决问题的方案
饿汉单例
单例目的是:对外只能创建(new)一个对象。
思想是:
- 只要类加载就会new一个对象。因为以下代码是静态代码,在类初始化是就执行一次。
private static Singleton s = new Singleton();🔔懒汉的差别之处
- 将实例方法关闭(将其私有化,且不提供get与set方法,他就不可以被访问)[对外可以创建0个对象]
- 然后对外提供一个静态方法,可以通过方法获取单个实例,紧接着创建一个静态变量(静态变量在类加载的时候就会初始化,且只初始化一次)[对外可以创建1个对象]
饿汉代码
创建对象
package com.powernode.javase.oop_07;
public class Singleton {
//1.构造方法私有化
private Singleton(){}
//3.定义一个静态变量,在类加载的时候,初始化静态变量
private static Singleton s = new Singleton();
//2.对外提供一个静态的构造方法,外面可以通过这个方法获取单个实例
public static Singleton have(){
return s;
}
}
🔔定义静态变量一定要在静态方法之前,因为都是静态,程序在类初始化的时候,会从上到下依次执行。
调用对象&测试
package com.powernode.javase.oop_07;
public class SingletonTest {
public static void main(String[] args) {
//用方法调用
Singleton S1 = Singleton.have();
//测试
Singleton S2 = Singleton.have();
System.out.println(S1 == S2);
}
}
C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=55032:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
true
Process finished with exit code 0
返回两个地址相同,所有为true。
懒汉单例
思想:在用到这个对象的时候再创建对象,不是在类加载的时候创建对象。🔔与饿汉对比
创建对象
public class Singleton {
//1.构造方法私有化
private Singleton(){}
//3.定义一个静态变量,但这个变量不可以赋值,为null
private static Singleton s;
//2.对外提供一个静态的构造方法,外面可以通过这个方法获取单个实例
public static Singleton have(){
if (s == null){
s = new Singleton();
}
return s;
}
}
调用对象
package com.powernode.javase.oop_07;
public class SingletonTest {
public static void main(String[] args) {
//用方法调用
Singleton S1 = Singleton.have();
//测试
Singleton S2 = Singleton.have();
System.out.println(S1 == S2);
}
}
C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=58796:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
true
Process finished with exit code 0