En Java, ¿sigues sin cambios los nuevos objetos correspondientes para instancias de la clase?
Con más proyectos disponibles, la cantidad de escritura de código aumentará naturalmente, y gradualmente sentirá el patrón de diseño.
¿Cómo hacer las acciones de instanciación de la clase escrita, la alta cohesión, el bajo acoplamiento y tener ciertas capacidades de expansión?
Este artículo intenta comenzar con algunos códigos vívidos para presentar diferentes clases de instanciación de Java a todos.
El siguiente código se toma de la implementación del código fuente com.google.zxing:
public bitmatrix code (contenido de cadena, formato de barcodeFormat, int width, int altura, map <codeDintType,?> sugerencias) lanza WriterException {Object Writer; switch (format.ordinal ()) {caso 1: escritor = nuevo aztecwriter (); romper; Caso 2: escritor = new CodabarWriter (); romper; Caso 3: escritor = nuevo código39Writer (); romper; Caso 4: Caso 10: Caso 13: Caso 14: Valor predeterminado: tirar nueva IllegalArgumentException ("No hay codificador disponible para formato" + formato); Caso 5: escritor = nuevo código128Writer (); romper; Caso 6: escritor = new DataMatrixWriter (); romper; Caso 7: escritor = nuevo Ean8Writer (); romper; Caso 8: escritor = nuevo Ean13Writer (); romper; Caso 9: escritor = nuevo ITFWriter (); romper; Caso 11: escritor = nuevo PDF417Writer (); romper; Caso 12: escritor = nuevo QRCodewriter (); romper; Caso 15: escritor = nuevo upcawriter (); romper; Caso 16: escritor = nuevo UpceWriter (); } return ((escritor) escritor) .Code (contenido, formato, ancho, altura, sugerencias); }El BarCodeFormat es así:
public enum BarcodeFormat {Aztec, Codabar, Code_39, Code_93, Code_128, data_matrix, ean_8, ean_13, itf, maxicode, pdf_417, qr_code, rss_14, rss_expenned, upc_a, upc_ean_ean_ean_ean_ean_extionsion; BarCodeFormat privado () {}} La función proporcionada por el código fuente es generar información en una matriz de bits a través de varios tipos diferentes de claros de códigos de barras, y luego llevarla a la imagen para formar varios tipos de códigos de barras que se pueden ver en todas partes.
BitMatrix bitMatrix = new MultiformAtWriter (). ENCODE (_TEXT, BARCODEFORMAT.QR_CODE, QRCODEWIDTH, QRCODEHEIGHT, SIGNS);
MatriMifiToImageWriter.WriteTofile (bitMatrix, QrcodeFormat, qrcodeFile);
El autor del código fuente utiliza la nueva clase enum enum enum introducida en JDK 1.5 aquí y escribió la clase BarcodeFormat, que define las propiedades de diferentes tipos de códigos de barras.
Llame a MultiformAtWriter.enDode () para instanciar la clase específica de acuerdo con el número de secuencia del parámetro BarcodeFormat.xx en la clase de enumeración.
switch (format.ordinal ()) {caso 1: escritor = nuevo aztecwriter (); romper; Caso 2: escritor = new CodabarWriter (); romper; Caso 3: escritor = nuevo código39Writer (); romper; ............ Estas clases de escritor de código de barras implementan dos métodos codificadores de escritor de interfaz abstracto.
Public Interface Writer {BitMatrix code (String Var1, BarcodeFormat Var2, int var3, int var4) lanza WriteRexception; Bitmatrix code (string var1, barcodeFormat var2, int var3, int var4, map <codenichinttype,?> Var5) lanza WriteRexception;}La clase de Wirter de código de barras específica realiza diferentes lógicas basadas en diferentes tipos de reglas de código de barras.
Los usuarios no necesitan prestar demasiada atención a la implementación interna. Necesitan generar qué tipo de código de barras necesitan para elegir y usar el tipo de código de barras apropiado. Los ejemplos anteriores se implementan en el código QR.
Veamos un código de método para la clase de instanciación dinámica del clásico WebWork MVC Framework:
Configuración estática privada getDefaultConfiguration () {if (defaultImpl == null) {defaultImpl = new DefaultConfiguration (); intente {String className = getString ("WebWork.Configuration"); if (! classname.equals (defaultImpl.getClass (). getName ())) {try {DefaultImpl = (Configuration) ObjectFactory.getObjectFactory (). BuildBean (Thread.CurrentThread (). GetContextClassLoader (). LoadClass (className)); } catch (excepción e) {log.error ("no pudo instanciar la configuración", e); }} return DefaultImpl; } Catch (ilegalArgumentException localillegalargumentException) {}}}El código fuente se toma del núcleo web. Es posible que muchos espectadores no hayan oído hablar de la webwork, pero los puntales deberían ser bien conocidos. Struts2 Core se reescribe de WebWork.
La función proporcionada por el código fuente anterior es instanciar la clase de lectura de archivo de configuración definida por el usuario, y la definición está en el archivo de configuración.
El autor del código fuente usa Thread.CurrentThread (). GetContextClassLoader (). LoadClass (ClassName) Carger en Thread para instanciar dinámicamente las clases de lectura de archivos de configuración personalizadas, que es la forma más eficiente.
Delegar cadena de cargador de clase: SystemClassLoader -> ExtensionClassLoader -> BootstrapClassLoader
El cargador de clases en el lado izquierdo de la cadena de delegación puede usar naturalmente la clase cargada por el cargador de clases a la derecha. El mecanismo de carga de clase es determinar si está cargando la clase y no está preguntando al superior.
Estos tres cargadores de clase corresponden a la prioridad del compilador y diferentes rutas para encontrar el archivo de clase:
Class.forname () usado en proyectos diarios comenzará a solicitar desde BootstrapClassLoader, que es el más consumidor de recursos.
El autor del código fuente utiliza un cargador de clase de subprocesos aquí, correspondiente al SystemClassLoader, que sin duda es la más alta eficiencia.