单例模式代码怎么写?

如题所述

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