Directorio de artículos
El patrón singleton es uno de los patrones de diseño.
Características: un objeto solo puede tener uno
Patrón de singleton hambriento
Desventajas, pérdida de memoria.
Ventajas, alta eficiencia de ejecución y alta velocidad.
Estructura del proyecto
Computer.java
package com;
import java.io.Serializable;
public class Computer {
/*
* 饿汉式单例模式
* 不管用不用,先给你创建好,用的话直接那给你
* */
private static Computer computer=new Computer();
static Computer getInstance() {
return computer;
}
}
Test.java
package com;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) {
Computer pc = Computer.getInstance();
Computer pc1 = Computer.getInstance();
System.out.println(pc==pc1);
}
}
Modo perezoso singleton (sin bloqueo)
Computer.java
package com;
import java.io.Serializable;
public class Computer {
/*
* 懒汉式单例模式
* */
private static Computer computer;
public static Computer getInstance() {
if(computer==null) {
computer = new Computer();
}
return computer;
}
}
Test.java
package com;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) {
Computer pc = Computer.getInstance();
Computer pc1 = Computer.getInstance();
System.out.println(pc==pc1);
}
}
Modo perezoso singleton (bloqueado)
Computer.java
package com;
import java.io.Serializable;
public class Computer {
/*
* 懒汉式单例模式
* */
private static Computer computer;
public static synchronized Computer getInstance() {
if(computer==null) {
synchronized(Computer.class) {
if(computer==null) {
computer = new Computer();
}
}
}
return computer;
}
}
Test.java
package com;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) {
Computer pc = Computer.getInstance();
Computer pc1 = Computer.getInstance();
System.out.println(pc==pc1);
}
}
Cerradura de doble verificación
El nivel de la cerradura cae del método al objeto
Reflejo destrucción singleton
Entre ellos, construtor se refiere al valor del método de construcción, y tiene un método newInstance que puede instanciar el objeto.
其中construtor是值指构造方法,他有一个newInstance的方法,可以实例化对象。
try {
//加载类
Class cls = Class.forName("spring4.Computer");
//获取构造方法,此处拿第1个构造方法
Constructor constructor = cls.getDeclaredConstructors()[0];
//设置构造方法可以访问,即使是私有的。
constructor.setAccessible(true);
//利用构造方法实例化该类的对象
Object o1 = constructor.newInstance();
Object o2 = constructor.newInstance();
System.out.println(o1==o2);
} catch (Exception e) {
e.printStackTrace();
}