¿Cómo escribir código en modo singleton?
Singleton es uno de los patrones de diseño más comunes y se utiliza en la mayoría de los sistemas para mantener la única instancia en el sistema. \x0d\ Se puede dividir en modo ansioso, el código de muestra es el siguiente: \x0d\ Código Java\x0d\ 1. clase EagerSingleton{\x0d\ 2. privado estático final EagerSingleton m_instance = new EagerSingleton();\x0d\ 3 . privado EagerSingleton( ){}\x0d\ 4. público estático EagerSingleton getInstance(){\x0d\ 5. return m_instance;\x0d\ 6. }\x0d\ 7.}\x0d\ class EagerSingleton{\x0d\ privado estático final EagerSingleton m_instance = new EagerSingleton();\x0d\ private EagerSingleton(){}\x0d\ public static EagerSingleton getInstance(){\x0d\ return m_instance;\x0d\ }\x0d\ }\x0d\ y modo diferido, el El código de muestra es el siguiente:\ x0d\ Código Java\x0d\ 1.class LazySingleton{\x0d\ 2.private static LazySingleton m_instance = null;\x0d\ 3.private LazySingleton(){}\x0d\ 4.public sincronizado estático getInstance(){\x0d\ 5. if(m_instance == null){\x0d\ 6. m_instance = new LazySingleton();\x0d\ 7. }\x0d\ 8. return m_instance;\x0d\ 9. }\ x0d\ 10.}\x0d \ class LazySingleton{\x0d\ privado estático LazySingleton m_instance = null;\x0d\ privado LazySingleton(){}\x0d\ público sincronizado estático getInstance(){\x0d\ if (m_instance == null) {\x0d\ m_instance = new LazySingleton();\x0d\ }\x0d\ return m_instance;\x0d\ }\x0d\ }\x0d\ En el código fuente de Java, Runtime.getRuntime() es un ejemplo de un singleton. \x0d\ El espíritu del modo singleton es mantener una instancia en todo el sistema. En términos generales, si es necesario mantener varios ejemplos en un sistema, se produce el modo multiton. \x0d\ El modo Multiton (Multiton) retiene múltiples instancias de sí mismo agregando objetos y devuelve las instancias requeridas de acuerdo con los parámetros del cliente.
\x0d\ El código de muestra es el siguiente:\x0d\ Código Java\x0d\ 1. class Multiton{\x0d\ 2. private final int INSTANCE_SIZE = 10;\x0d\ 3. instancias de mapas estáticos privados = new HashMap(INSTANCE_SIZE); \x0d \ 4. nombre de cadena privada;\x0d\ 5. Multiton privado(){}\x0d\ 6. Multiton privado(nombre de cadena){\x0d\ 7. this.name = nombre;\x0d\ 8. }\ x0d\ 9. getInstance estático sincronizado público (nombre de cadena){\x0d\ 10. if(instances.containsKey(nombre)){\x0d\ 11. return instancias.get(nombre);\x0d\ 12. }\x0d\ 13. else{\x0d\ 14. ins = new Multiton(nombre);\x0d\ 15. instancias.put(nombre, ins);\x0d\ 16. return ins;\x0d\ 17. }\x0d\ 18. }\ x0d\ 19.}\x0d\ class Multiton{\x0d\ private final int INSTANCE_SIZE = 10;\x0d\ instancias de mapas estáticos privados = new HashMap(INSTANCE_SIZE);\x0d\ private String nombre;\x0d\ private Multiton( ){ }\x0d\ multiton privado(nombre de cadena){\x0d\ este.nombre = nombre;\x0d\ }\x0d\ getInstance estática pública sincronizada(nombre de cadena){\x0d\ if(instancias.containsKey(nombre)) {\ x0d\ return instancias.get(nombre);\x0d\}\x0d\ else{\x0d\ ins = new Multiton(nombre);\x0d\ instancias.put(nombre, ins);\x0d\ return ins; \x0d \ }\x0d\ }\x0d\ }\x0d\ [nextpage]\x0d\ Un ejemplo práctico es KeyGenerator, el código de muestra es el siguiente:\x0d\ Código Java\x0d\ 1.class KeyGenerator{\x0d\ 2. private final int POOL_SIZE = 20;\x0d\ 3. Instancias de mapas estáticos privados = new HashMap(16);\x0d\ 4. private KeyInfo keyinfo;\x0d\ 5. private KeyGenerator(){}\x0d\ 6. private KeyGenerator(String keyName){\x0d\ 7. this.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\ 8. }\x0d\
9. getInstance(String keyName){\x0d\ 10. if(instances.containsKey(keyName)){\x0d\ 11. return (KeyGenerator)instances.get(keyName);\x0d\ 12. }\x0d \ 13. else{\x0d\ 14. keyGen = new KeyGenerator(keyName);\x0d\ 15. instancias.put(nombre, keyGen);\x0d\ 16. return keyGen;\x0d\ 17. }\x0d\ 18 }\x0d\ 19. public synzhronized int getNextKey(){\x0d\ 20. return keyinfo.getNextKey();\x0d\ 21. }\x0d\ 22. }\x0d\ class KeyGenerator{\x0d\ private final int. POOL_SIZE = 20;\x0d\ instancias de mapas estáticos privados = new HashMap(16);\x0d\ private KeyInfo keyinfo;\x0d\ private KeyGenerator(){}\x0d\ private KeyGenerator(String keyName){\x0d\ this.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\ }\x0d\ getInstance estático sincronizado público (String keyName){\x0d\ if(instances.containsKey(keyName)){\x0d\ return (KeyGenerator)instances.get(keyName) );\x0d\ }\x0d\ else{\x0d\ keyGen = new KeyGenerator(keyName);\x0d\ instancias.put(nombre, keyGen);\x0d\ return keyGen;\x0d\}\x0d\ }\x0d \ público sincronizado int getNextKey(){\x0d\ return keyinfo.getNextKey();\x0d\ }\x0d\ }