`
yaoweinan
  • 浏览: 138458 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

多种方法实现单例模式

 
阅读更多

package cn.singleton;

import java.util.HashMap;
import java.util.Map;

/**
 * 单例模式实现
 * @author 姚伟楠
 *
 */
public class Singleton {

 /**
  * 测试入口
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Object obj1=Object.getInstance();
  Object obj2=Object.getInstance();
  System.out.print("懒汉式:");
  System.out.println(obj1==obj2);
  Object1 obj3=Object1.getInstance();
  Object1 obj4=Object1.getInstance();
  System.out.print("饿汉式:");
  System.out.println(obj3==obj4);
  Object2 obj5=Object2.getInstance(Object2.class.getName());
  Object2 obj6=Object2.getInstance(Object2.class.getName());
  System.out.print("登记式:");
  System.out.println(obj5==obj6);
  
 }

}
/**
 * 懒汉式单例(需要时候才实例化)
 * @author 姚伟楠
 *
 */
class Object{
 private static Object instance=null;
 private Object() {}
 public static synchronized Object getInstance(){
  if(null==instance)instance=new Object();
  return instance;
  
 }
}
/**
 * 饿汉式(初始化类时候实例化)
 * @author 姚伟楠
 *
 */
class Object1{
 private static Object1 instance=new Object1();
 private Object1(){}
 public static Object1 getInstance(){
  return instance;
 }
}
/**
 * 登记式(内类存储实例并作登记,需要时直接按照登记号(类名)获取)
 * @author 姚伟楠
 *
 */
class Object2{
 private static Map<String, Object2> instances=new HashMap<String, Object2>();
 static{
  Object2 instance=new Object2();
  instances.put(Object2.class.getName(), instance);
 }
 /**
  * 保证子类、同包、自身可以创建非单例实例
  */
 protected Object2(){}
 public static Object2 getInstance(String name){
  if(null==name){
   name = Object2.class.getName();
  }
   if(instances.get(name) == null) {
             try {
              instances.put(name, (Object2) Class.forName(name).newInstance());
             } catch (InstantiationException e) {
                 e.printStackTrace();
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
             } catch (ClassNotFoundException e) {
                 e.printStackTrace();
             }
         }

  return instances.get(name);
  
 }
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java实现多种单例模式

    以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...

    在Python中实现单例模式.docx

    Python作为一种灵活且强大的编程语言,提供了多种方式来实现单例模式。 #### 使用类装饰器实现单例 通过使用类装饰器来实现单例模式是最常见的方式之一。这种方法的核心思想是在创建类实例时检查是否存在已有的...

    单例模式各种实现方式

    在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的...

    c++单例模式线程日志类

    总之,这个C++实现的单例模式日志类结合了多种高级特性,包括多线程支持、日志等级控制、毫秒级时间戳和灵活的参数及格式化输出。这样的设计对于任何需要记录系统事件或调试的项目都是一个强大的工具。

    java单例模式实例

    在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...

    单例模式Java实现

    在Java中,我们可以使用多种方式来实现单例模式: 1. **饿汉式(静态常量)**:这是最简单的单例实现方式,它在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class...

    单例模式代码实现

    这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看

    C++实现单例模式(懒汉式)源码

    在C++中,实现单例模式有多种方式,这里我们将聚焦于懒汉式(Lazy Initialization)的实现。懒汉式单例的特点是延迟初始化,即只有在第一次使用时才会创建实例,这有助于提高程序的运行效率。 一、懒汉式单例模式的...

    单例模式(Singleton)的6种实现

    Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑到了线程安全问题,因此使用枚举实现单例模式是一种简洁而且高效的解决方案。 6. 容器式单例(Singleton Holder) 通过一个私有的静态内部类...

    单例模式详解~~单例模式详解~~

    在Java中,实现单例模式有多种方式,但最常见的问题是线程安全问题。例如,上述代码展示了一个简单的单例实现,称为"饿汉式"单例,因为无论是否需要,它都会在类加载时立即创建实例。这种方式虽然简单,但在多线程...

    7种单例模式

    单例模式是软件设计模式中的一种经典模式,其主要...总结起来,单例模式有多种实现方式,每种方式都有其适用场景和优缺点。在实际应用中,开发者应根据项目需求选择合适的单例实现,并注意线程安全和反序列化等问题。

    发布订阅者模式实现(内含单例模式、缺省适配器模式)

    - 实现单例模式通常有懒汉式、饿汉式和双重检查锁定等方式,选择哪种方式取决于线程安全需求和性能考虑。 3. **缺省适配器模式(Default Adapter Pattern)**: - 当一个类需要使用某个接口,但不希望实现所有的...

    最简单的单例模式源码

    在Java中,我们可以采用多种方式来实现单例模式,其中最常见的是懒汉式(Lazy Initialization)和饿汉式(Eager Initialization)。根据提供的文件名`Singleton.java`,我们猜测这里可能实现的是懒汉式单例,因为...

    使用python写的单例模式日志记录器(设计模式之单例模式)

    在Python中,由于其动态语言特性,实现单例模式有多种方式,例如使用模块级别变量、元类或者装饰器。 下面是一个简单的Python单例模式日志记录器的实现: ```python class SingletonLogger(object): _instance = ...

    JAVA单例模式的几种实现方法

    Java中实现单例模式的方法有很多种,每种方法都有其适用场景和优缺点。选择合适的实现方式需要根据实际需求和应用场景综合考虑。例如,如果程序启动时就需要单例对象,那么可以使用饿汉式;如果希望在真正需要时才...

    C#版本的单例模式源码

    在C#中,实现单例模式有多种方法,这里我们将深入探讨这些方法及其优缺点。 1. **静态内部类实现** 这是最推荐的C#单例模式实现方式,因为它既线程安全,又避免了懒汉式(延迟初始化)的同步开销。代码如下: ``...

    Java 单例模式 工具类

    本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...

    单例模式各种实现及分享

    java单例模式的多种实现方法及优劣区分,以及如何摧毁单例模式。能够让大家认识到单例的多种多样

    设计模式单例模式

    总结来说,单例模式有多种实现方式,包括懒汉式、饿汉式和同步枷锁等。开发者需要根据实际需求,平衡性能和线程安全,选择最适合的实现策略。在Java中,推荐使用双重检查锁定的懒汉式或静态内部类的饿汉式,它们在...

Global site tag (gtag.js) - Google Analytics