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

Java 设计模式-单例模式(Singleton)

 
阅读更多

      什么是单例模式?

      单例模式就是某个类只有唯一一个实例。

      单例模式的意图

        单例模式的意图是为了确保一个类有且仅有一个实例,并且为它提供一个全局的访问点

      单例模式的要点

  1.   一个类只有一个实例
  2. 类必须自行创建这个实例
  3. 类自行向系统提供实例

       常见的单例实现方式

  • 饿汉模式
饿汉模式在类中声明一个实例并初始化

 

/**
 * 饿汉单例模式
 * @author zhanfgwei
 * @version $Id: HungrySingleton.java, v 0.1 2014年9月20日 下午10:17:11 Lenovo Exp $
 */
public class EagerSingleton {

    /***初始化一个实例**/
    private static final EagerSingleton instance = new EagerSingleton();

    /**
     * 私有化的构造方法
     */
    private EagerSingleton() {
        super();
    }

    /**
     * 静态工厂方法获取实例
     *
     * @return
     */
    public static EagerSingleton getInstance() {
        return instance;
    }

}

 

  •  懒汉模式-线程安全
懒汉模式,是延迟初始化但是如果工厂方法不同步会导致产生多实例
/**
 *
 * @author zhangwei
 * @version $Id: SafeLazySingleton.java, v 0.1 2014年9月20日 下午10:25:04 Lenovo Exp $
 */
public class SafeLazySingleton {

    /**
     * 实例属性
     */
    private static SafeLazySingleton instance = null;

    /**
     * 私有化构造方法
     */
    private SafeLazySingleton() {

    }

    /**
     *同步的静态工厂方法
     *
     * @return
     */
    synchronized public static SafeLazySingleton getInstance() {
        if (instance == null) {
            instance = new SafeLazySingleton();
        }
        return instance;
    }

}
  •  内部类方式
内部类方法是对懒汉模式的优化,结合了饿汉模式和懒汉模式的有点,有效地解决了延迟初始化和线程安全问题。

 

/**
 *
 * @author zhangwei
 * @version $Id: InnerSingleton.java, v 0.1 2014年9月20日 下午11:11:26 Lenovo Exp $
 */
public class InnerSingleton {

    /**
     * 私有化的构造方法
     */
    private InnerSingleton() {

    }

    /**
     * 静态内部类,持有实例
     *
     * @author zhangwei
     * @version $Id: InnerSingleton.java, v 0.1 2014年9月20日 下午11:22:35 Lenovo Exp $
     */
    private static class InstanceHolder {

        static InnerSingleton instance = new InnerSingleton();
    }

    /**
     * 静态工厂方法,
     *
     * @return
     */
    public static InnerSingleton getInstance() {
        return InstanceHolder.instance;
    }

}

 

  •  登记式
/**
 *
 * @author zhangwei
 * @version $Id: RegisterSingletone.java, v 0.1 2014年9月20日 下午10:27:12 Lenovo Exp $
 */
public class RegisterSingleton {

    private static Map<String, RegisterSingleton> registers = new ConcurrentHashMap<String, RegisterSingleton>();

    static {
        registers.put(RegisterSingleton.class.getName(), new RegisterSingleton());
    }

    private RegisterSingleton() {

    }

    public static RegisterSingleton getInstance(String name) {
        if (name == null) {
            name = RegisterSingleton.class.getName();
        }
        if (registers.get(name) == null) {
            try {
                registers.put(name, (RegisterSingleton) Class.forName(name).newInstance());
            } catch (Exception e) {
                LoggerUtils.error("异常");
            }
        }
        return registers.get(name);
    }

}

 

0
0
分享到:
评论
2 楼 zhangwei_david 2015-02-02  
zskangs1126 写道
登记式 一般用在什么地方?

这个只是单例模式实现的方式
1 楼 zskangs1126 2015-02-02  
登记式 一般用在什么地方?

相关推荐

    java设计模式----单例模式

    在Java编程语言中,设计模式是一种经过验证的解决常见软件设计问题的最佳实践。单例模式是其中最常用的一种,它的核心思想是确保一个类只有一个实例,并提供全局访问点。单例模式的应用场景包括:控制资源的访问、...

    Java设计模式-单例模式详解

    Java设计模式-单例模式详解 单例模式是 Java 设计模式中的一种常用的设计模式,旨在保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 ...

    java设计模式-单例.pdf

    ### Java设计模式——单例模式详解 #### 一、单例模式概述 单例模式是设计模式中的一个重要组成部分,属于创建型模式之一。其主要作用是确保某个类仅有一个实例存在,并提供一个全局访问该实例的方法。这在很多场景...

    设计模式-单例模式

    **设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...

    ava常用设计模式-单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供这一实例。 单例模式有多种实现...

    常见设计模式-单例模式

    设计模式-单例模式 单例模式是一种常见的设计模式,它的主要作用是确保在内存中仅创建一次对象,并提供一个全局访问点。单例模式有两种类型:饿汉类型和懒汉类型。 饿汉类型的单例模式是在类加载时创建对象,例如...

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    单例模式是软件设计模式中的一种经典模式,其主要目的是保证一个类只有一个实例,并提供一个全局访问点。在Java中,有多种实现单例模式的方法,包括简单实现、双重检查锁定(Double-Checked Locking)、静态内部类和...

    设计模式-单例设计模式

    ### 设计模式—单例设计模式详解 #### 定义 单例模式是一种常见的创建型设计模式,其核心思想在于确保一个类仅有一个实例存在,并且该实例由该类自行创建,随后向整个系统提供这一唯一实例。 #### 类图解析 在设计...

    设计模式-单例模式(讲解及其实现代码)

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供全局访问点。这种模式在许多场景下非常有用,比如控制共享资源、管理系统级别的对象,如数据库连接池或者线程池等。单例模式的核心在于限制类的...

    大话设计模式--Singleton(单例模式)

    单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...

    Java面向对象(高级)- 单例(Singleton)设计模式

    单例设计模式是面向对象编程中的一种常见设计模式,它的主要目的是确保一个类在整个程序运行期间只有一个实例,并提供全局访问点。这种模式在Java中被广泛应用,尤其是在需要控制资源的共享,如数据库连接池,线程池...

    java-单例模式几种写法

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。在Java中,实现单例模式有多种方法,每种方法都有其特点和适用场景。以下是对这六种常见单例模式实现方式的...

    优秀的设计模式示例-单例模式

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。以下是对单例模式的详细...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    java设计模式之单例模式.zip

    Java设计模式是面向对象编程中的重要概念,它们是软件开发中经过验证的、解决常见问题的最佳实践。在这些模式中,单例模式是最为广泛使用的一种。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得在整个...

    Java设计模式之单例模式的七种写法

    Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...

    设计模式-Java单例模式的各种实现实例

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。这种模式通常用于需要频繁地创建和销毁的对象,以减少系统性能开销。 单例模式的优点: ...

    JAVA设计模式之单例模式

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用,尤其是在需要控制实例化过程,或者确保某类只有一个实例时。本文将深入探讨Java中的单例模式,帮助你理解其原理和应用。 单例模式的核心思想是...

Global site tag (gtag.js) - Google Analytics