Aplicación extracurricular: modo Singleton


El patrón singleton es uno de los patrones de diseño.

Características: un objeto solo puede tener uno

121212

Patrón de singleton hambriento

Desventajas, pérdida de memoria.
Ventajas, alta eficiencia de ejecución y alta velocidad.

Estructura del proyecto

Inserte la descripción de la imagen aquí

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

Inserte la descripción de la imagen aquí

El nivel de la cerradura cae del método al objeto

Reflejo destrucción singleton

Inserte la descripción de la imagen aquí
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();
    }

La serialización destruye singleton

Inserte la descripción de la imagen aquí

Patrón singleton registrado

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_44627608/article/details/114915133
Recomendado
Clasificación