单例模式代码怎么写?

单例模式(Singleton) ,属于最常见的设计模式之一,大部分系统都会用到,目的是为了维护系统中唯一的一个实例。\x0d\x0a可分为eager模式,示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class EagerSingleton{\x0d\x0a2. private static final EagerSingleton m_instance = new EagerSingleton()...
单例模式代码怎么写?
 单例模式(Singleton) ,属于最常见的设计模式之一,大部分系统都会用到,目的是为了维护系统中唯一的一个实例。\x0d\x0a  可分为eager模式,示例代码如下:\x0d\x0a  Java代码\x0d\x0a  1.class EagerSingleton{\x0d\x0a  2. private static final EagerSingleton m_instance = new EagerSingleton();\x0d\x0a  3. private EagerSingleton(){}\x0d\x0a  4. public static EagerSingleton getInstance(){\x0d\x0a  5. return m_instance;\x0d\x0a  6. }\x0d\x0a  7.}\x0d\x0a  class EagerSingleton{\x0d\x0a  private static final EagerSingleton m_instance = new EagerSingleton();\x0d\x0a  private EagerSingleton(){}\x0d\x0a  public static EagerSingleton getInstance(){\x0d\x0a  return m_instance;\x0d\x0a  }\x0d\x0a  }\x0d\x0a  和 lazy模式,示例代码如下:\x0d\x0a  Java代码\x0d\x0a  1.class LazySingleton{\x0d\x0a  2. private static LazySingleton m_instance = null;\x0d\x0a  3. private LazySingleton(){}\x0d\x0a  4. public synchronized static getInstance(){\x0d\x0a  5. if(m_instance == null){\x0d\x0a  6. m_instance = new LazySingleton();\x0d\x0a  7. }\x0d\x0a  8. return m_instance;\x0d\x0a  9. }\x0d\x0a  10.}\x0d\x0a  class LazySingleton{\x0d\x0a  private static LazySingleton m_instance = null;\x0d\x0a  private LazySingleton(){}\x0d\x0a  public synchronized static getInstance(){\x0d\x0a  if(m_instance == null){\x0d\x0a  m_instance = new LazySingleton();\x0d\x0a  }\x0d\x0a  return m_instance;\x0d\x0a  }\x0d\x0a  }\x0d\x0a  java源码中,Runtime.getRuntime()就是单例的一个例子。\x0d\x0a  单例模式的精神就是整个系统中维护一个实例,推广开来,如果在一个系统中需要维护多个示例,那么就产生了多例模式(multiton)。\x0d\x0a  多例模式(Multiton) ,通过聚集对象了保留自身的多个示例,根据客户端的参数返回所需要的实例。\x0d\x0a  示例代码如下:\x0d\x0a  Java代码\x0d\x0a  1.class Multiton{\x0d\x0a  2. private final int INSTANCE_SIZE = 10;\x0d\x0a  3. private static Map instances = new HashMap(INSTANCE_SIZE);\x0d\x0a  4. private String name;\x0d\x0a  5. private Multiton(){}\x0d\x0a  6. private Multiton(String name){\x0d\x0a  7. this.name = name;\x0d\x0a  8. }\x0d\x0a  9. public synchronized static getInstance(String name){\x0d\x0a  10. if(instances.containsKey(name)){\x0d\x0a  11. return instances.get(name);\x0d\x0a  12. }\x0d\x0a  13. else{\x0d\x0a  14. ins = new Multiton(name);\x0d\x0a  15. instances.put(name, ins);\x0d\x0a  16. return ins;\x0d\x0a  17. }\x0d\x0a  18. }\x0d\x0a  19.}\x0d\x0a  class Multiton{\x0d\x0a  private final int INSTANCE_SIZE = 10;\x0d\x0a  private static Map instances = new HashMap(INSTANCE_SIZE);\x0d\x0a  private String name;\x0d\x0a  private Multiton(){}\x0d\x0a  private Multiton(String name){\x0d\x0a  this.name = name;\x0d\x0a  }\x0d\x0a  public synchronized static getInstance(String name){\x0d\x0a  if(instances.containsKey(name)){\x0d\x0a  return instances.get(name);\x0d\x0a  }\x0d\x0a  else{\x0d\x0a  ins = new Multiton(name);\x0d\x0a  instances.put(name, ins);\x0d\x0a  return ins;\x0d\x0a  }\x0d\x0a  }\x0d\x0a  }\x0d\x0a  [nextpage]\x0d\x0a  一个实用的例子就是KeyGenerator, 示例代码如下:\x0d\x0a  Java代码\x0d\x0a  1.class KeyGenerator{\x0d\x0a  2. private final int POOL_SIZE = 20;\x0d\x0a  3. private static Map instances = new HashMap(16);\x0d\x0a  4. private KeyInfo keyinfo;\x0d\x0a  5. private KeyGenerator(){}\x0d\x0a  6. private KeyGenerator(String keyName){\x0d\x0a  7. this.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\x0a  8. }\x0d\x0a  9. public synchronized static getInstance(String keyName){\x0d\x0a  10. if(instances.containsKey(keyName)){\x0d\x0a  11. return (KeyGenerator)instances.get(keyName);\x0d\x0a  12. }\x0d\x0a  13. else{\x0d\x0a  14. keyGen = new KeyGenerator(keyName);\x0d\x0a  15. instances.put(name, keyGen);\x0d\x0a  16. return keyGen;\x0d\x0a  17. }\x0d\x0a  18. }\x0d\x0a  19. public synzhronized int getNextKey(){\x0d\x0a  20. return keyinfo.getNextKey();\x0d\x0a  21. }\x0d\x0a  22. }\x0d\x0a  class KeyGenerator{\x0d\x0a  private final int POOL_SIZE = 20;\x0d\x0a  private static Map instances = new HashMap(16);\x0d\x0a  private KeyInfo keyinfo;\x0d\x0a  private KeyGenerator(){}\x0d\x0a  private KeyGenerator(String keyName){\x0d\x0a  this.keyinfo = new KeyInfo(POOL_SIZE, keyName);\x0d\x0a  }\x0d\x0a  public synchronized static getInstance(String keyName){\x0d\x0a  if(instances.containsKey(keyName)){\x0d\x0a  return (KeyGenerator)instances.get(keyName);\x0d\x0a  }\x0d\x0a  else{\x0d\x0a  keyGen = new KeyGenerator(keyName);\x0d\x0a  instances.put(name, keyGen);\x0d\x0a  return keyGen;\x0d\x0a  }\x0d\x0a  }\x0d\x0a  public synzhronized int getNextKey(){\x0d\x0a  return keyinfo.getNextKey();\x0d\x0a  }\x0d\x0a  }2022-12-11
mengvlog 阅读 6 次 更新于 2025-07-19 13:11:17 我来答关注问题0
  •  阿暄生活 请教Kotlin如何写单例模式

    Kotlin中的单例模式使用object关键字:Kotlin提供了一个非常简单的方法来创建单例,即使用object关键字。这种方式直接定义了一个单例对象,无需额外的代码。示例代码:kotlinobject SingleTest { fun hi { print }} 调用方式: 在Kotlin中,可以直接通过类名调用其方法或属性,如SingleTest.hi。 在Ja...

  •  翡希信息咨询 Python实现工厂模式、抽象工厂,单例模式

    Python中实现工厂模式、抽象工厂模式和单例模式的方法如下:工厂模式: 函数式工厂模式: 定义一个Product类,例如Product。 创建一个工厂函数create_product,该函数根据传入的参数创建Product实例,例如product = create_product。 类式工厂模式: 定义Product类和ProductFactory类。 ProductFactory...

  • \x0d\x0a可分为eager模式,示例代码如下:\x0d\x0aJava代码\x0d\x0a1.class EagerSingleton{\x0d\x0a2. private static final EagerSingleton m_instance = new EagerSingleton();\x0d\x0a3. private EagerSingleton(){}\x0d\x0a4. public static EagerSingleton getInstance(){\x0...

  •  翡希信息咨询 DCL 单例模式

    在实现序列化的单例类中重写readResolve方法,确保在反序列化时返回正确的单例实例,从而防止序列化后创建新的对象实例。示例代码:示例代码展示了如何通过DCL实现单例模式,并通过在构造函数内部增加检查和重写readResolve方法来应对反射和序列化带来的挑战。总结:DCL单例模式通过双重检查锁定机制确保了线程安...

  •  文暄生活科普 Python实现工厂模式、抽象工厂,单例模式

    Python中通过元类实现,如Singleton元类确保MyClass类的实例化:单例模式:使用MyClass元类,确保实例化时只有一个实例。验证代码如:obj1 = MyClass(), obj2 = MyClass(), obj1 is obj2。通过以上示例,您可以更好地理解如何在Python中运用这些设计模式来管理和控制对象的创建过程。

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部