Modo de peso mosca: a través de la tecnología para compartir, puede soportar efectivamente una gran cantidad de objetos de grano fino.
El modo disfrutar yuan se divide en el modo de disfrutar simple yuan y compuesto disfrutar del modo yuan en "java y modo" de Yan Hong. El compuesto disfruta de yuan en el modo compuesto no se puede compartir. La clave para compartir el objeto disfrutar yuan es distinguir entre estados internos y externos. Estos dos "congruentes" son demasiado difíciles de entender. No estoy diciendo que la traducción no sea buena, pero tal vez mi capacidad de comprensión sea pobre, o la versión de traducción de "Elementos de patrón de diseño del software reutilizable orientado a objetos" se traduce en objetos internos y externos. Es relativamente sencillo y se siente incómodo con el olor literario de las cosas conceptuales que son demasiado fuertes. Los caracteres aquí también usan la declaración "Casics del software orientado a objetos reutilizable del patrón de diseño", que no distingue entre modos simples y modos compuestos, pero tiene un peso sincrete sincronizado (en "Java y modo", indica que el disfrute compuesto no se puede compartir). Aquí decimos que no puede compartir roles de disfrute. De esta manera, los personajes en el modo de disfrute incluyen:
El diagrama institucional de la clase del modelo Xiangyuan es el siguiente:
Al usar el patrón de Enciclopedia en Java.Lang.String Design, sabemos que las cadenas en Java siempre se comparten, como el siguiente fragmento de código:
Cadena M = "A"; String N = "A"; System.out.println (M == n);
Esto generará verdadero, lo que indica que M y N apuntan a la misma instancia, y solo hay una "A" en la memoria. Así es como se usa el modo disfrutar yuan en la cadena.
El uso del modo Xiangyuan en el proceso de edición y almacenamiento de texto. Aquí, se supone que el artículo está compuesto por objetos de línea y los objetos de línea están compuestos de varios objetos de caracteres. Sin embargo, si cada personaje guarda su propio objeto, entonces una publicación tiene miles de objetos de caracteres, lo que consume seriamente la memoria del sistema y causa una sobrecarga inaceptable de tiempo de ejecución. El buen método es usar el modo Xiangyuan para guardar los valores de codificación de caracteres ASCII, como un estado interno sin cambios, compartir los objetos de caracteres y los datos formateados, como el color y el tamaño relativos del carácter, el cliente mantiene en el exterior durante el tiempo de ejecución. Cada fila es un objeto universal no compartido, que se compone de un objeto universal (objeto de caracteres).
Echemos un vistazo a un ejemplo de una estructura simple del patrón de la enciclopedia:
/ *** Letter*/ public class Letter {Nombre de cadena privada; Public Letter (nombre de cadena) {this.name = name; } public String getName () {nombre de retorno; }} / ** * Una fábrica de Xiangyuan (fábrica Singleton) que genera objetos de letras */ public class LetterFactory {Map privado <cadena, letra> map; Instancia privada de letra estática = new LetterFactory (); private LetterFactory () {map = new Hashmap <String, lett> (); } public static LetterFactory getInStance () {instancia de retorno; } public void add (letra letra) {if (letra! = null &&! map.containskey (lett.getName ())) {map.put (lettngetName (), letra); } System.out.println ("map.size ====" + map.size ()); } Public Letter get (nombre de cadena) {return map.get (nombre); }} Prueba de clase pública {public static void main (string [] args) {LetterFactory factory = LetterFactory.getInStance (); String word = "facilidad"; addletterByName (fábrica, palabra); getLetter (fábrica, palabra); } // Agregar objeto de letra void static addletterByName (LetterFactory Factory, String Word) {for (char c: word.toCarArray ()) {factory.add (nueva letra (c + "")); }} // Objeto de letra de salida GetLetter void (LetterFactory Factory, String Word) {for (char c: word.toCarArray ()) {System.out.println (factory.get (c + "")); }}}Imprimir:
map.size ===== 1 map.size ==== 2 2 map.size ==== 2 2 map.size ====== 3 map.size ==== 4 map.size ==== 5 map.size ===== 5 flyweight.letter@3343c8b3 flyweight.etter@272d7a10 volante flyweight.letter@1aa8c488 flyweight.letter@3dfeca64 flyweight.letter@22998b08 flyweight.letter@1aa8c488