单例模式代码怎么写?

 单例模式(Singleton) ,属于最常见的设计模式之一,大部分系统都会用到,目的是为了维护系统中唯一的一个实例。\x0d\  可分为eager模式,示例代码如下:\x0d\  Java代码\x0d\  1.class EagerSingleton{\x0d\  2. private static final EagerSingleton m_instance = new EagerSingleton();\x0d\  3. private EagerSingleton(){}\x0d\  4. public static EagerSingleton getInstance(){\x0d\  5. return m_instance;\x0d\  6. }\x0d\  7.}\x0d\  class EagerSingleton{\x0d\  private static final EagerSingleton m_instance = new EagerSingleton();\x0d\  private EagerSingleton(){}\x0d\  public static EagerSingleton getInstance(){\x0d\  return m_instance;\x0d\  }\x0d\  }\x0d\  和 lazy模式,示例代码如下:\x0d\  Java代码\x0d\  1.class LazySingleton{\x0d\  2. private static LazySingleton m_instance = null;\x0d\  3. private LazySingleton(){}\x0d\  4. public synchronized static 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\  private static LazySingleton m_instance = null;\x0d\  private LazySingleton(){}\x0d\  public synchronized static getInstance(){\x0d\  if(m_instance == null){\x0d\  m_instance = new LazySingleton();\x0d\  }\x0d\  return m_instance;\x0d\  }\x0d\  }\x0d\  java源码中,Runtime.getRuntime()就是单例的一个例子。\x0d\  单例模式的精神就是整个系统中维护一个实例,推广开来,如果在一个系统中需要维护多个示例,那么就产生了多例模式(multiton)。\x0d\  多例模式(Multiton) ,通过聚集对象了保留自身的多个示例,根据客户端的参数返回所需要的实例。\x0d\  示例代码如下:\x0d\  Java代码\x0d\  1.class Multiton{\x0d\  2. private final int INSTANCE_SIZE = 10;\x0d\  3. private static Map instances = new HashMap(INSTANCE_SIZE);\x0d\  4. private String name;\x0d\  5. private Multiton(){}\x0d\  6. private Multiton(String name){\x0d\  7. this.name = name;\x0d\  8. }\x0d\  9. public synchronized static getInstance(String name){\x0d\  10. if(instances.containsKey(name)){\x0d\  11. return instances.get(name);\x0d\  12. }\x0d\  13. else{\x0d\  14. ins = new Multiton(name);\x0d\  15. instances.put(name, ins);\x0d\  16. return ins;\x0d\  17. }\x0d\  18. }\x0d\  19.}\x0d\  class Multiton{\x0d\  private final int INSTANCE_SIZE = 10;\x0d\  private static Map instances = new HashMap(INSTANCE_SIZE);\x0d\  private String name;\x0d\  private Multiton(){}\x0d\  private Multiton(String name){\x0d\  this.name = name;\x0d\  }\x0d\  public synchronized static getInstance(String name){\x0d\  if(instances.containsKey(name)){\x0d\  return instances.get(name);\x0d\  }\x0d\  else{\x0d\  ins = new Multiton(name);\x0d\  instances.put(name, ins);\x0d\  return ins;\x0d\  }\x0d\  }\x0d\  }\x0d\  [nextpage]\x0d\  一个实用的例子就是KeyGenerator, 示例代码如下:\x0d\  Java代码\x0d\  1.class KeyGenerator{\x0d\  2. private final int POOL_SIZE = 20;\x0d\  3. private static Map instances = 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. public synchronized static 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. instances.put(name, 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\  private static Map instances = 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\  public synchronized static getInstance(String keyName){\x0d\  if(instances.containsKey(keyName)){\x0d\  return (KeyGenerator)instances.get(keyName);\x0d\  }\x0d\  else{\x0d\  keyGen = new KeyGenerator(keyName);\x0d\  instances.put(name, keyGen);\x0d\  return keyGen;\x0d\  }\x0d\  }\x0d\  public synzhronized int getNextKey(){\x0d\  return keyinfo.getNextKey();\x0d\  }\x0d\  }