`

Singleton 模式 在 Java连接池中的应用

    博客分类:
  • Java
阅读更多

程序中经常有这样的要求,整个程序运行时只有一个实例被使用。
比如:数据库连接池,系统参数配置,Java API 中的 Runtime, Calendar ...
如何实现这种需求成为一个值得讨论的问题。

以往的做法,是在程序的某个类里面(比如是 GlobalObject )建立一个这个此种类的实例,然后规定
所有需要用到此类的,都从 GlobalObject 那里获得,看下面的例子:

public class ConnectionPoolManager 

{
    public ConnectionPoolManager 

   {
        // do some initialize work
    }
    public Connection getConnection()

   {
        ....
    }
}

public class GlobalObject 

{
    private ConnectionPoolManager connectionPoolManager;
    public GlobalObject () 

   {
        connectionPoolManager = new ConnectionPoolManager();
        ...
    }
    public void getConnectionPoolManager() 

   {
        return connectionPoolManager;
    }
}

public class QueryFunctions 

{
    public static Collection findStudentByName(String name)

    {
        ConnectionPoolManager = globalObject.getConnectionPoolManager();
        Connection connection = connectionPoolManager.getConnection();
        // query database
    }
}

但这样做有如下缺点:
  其他人可能 调用 ConnectionPoolManager 的构造函数自己建立一个 数据库连接池,导致
  程序中存在多个 ConnectionPoolManager,人为的规定往往得不到好的实施。
  GlobalObject 其实就是一个 C 语言中的全局变量,与面向对象的方法相冲突。



因此,可以使用 设计模式 中的 Singleton (单件)模式来完成以上的需求:
Java API 中的 Runtime 等等用的就是这种方法。
代码如下:

public class ConnectionPoolManager 

{
    private static instance = null;
    private ConnectionPoolManager() 

   {
        // do some initialize work
    }
    public static syncronized void getInstance() 

   {
        if (instance == null)

       {
            instance = new ConnectionPoolManager();
        }
        return instance;
    }
    public Connection getConnection()

   {
    }
}

ConnectionPoolManager 的使用

public class QueryFunctions 

{
    public static Collection findStudentByName(String name)

   {
        ConnectPoolManager connectionPoolManager = ConnectionPoolManager.getInstance();
        Connection conn = connectionPoolManager.getConnection();
        // query database
    }
}

1.instance 是私有的,开始时赋值为 null,外部只有通过 getInstance 方法才能获得他。
2.构造方法是私有的,这点很重要,保证只有这个类自己才能够调用,其他的类无法调用此构造函数。
3.getInstance 方法中:
   if 语句,保证只有一个 instance 存在
   唯一的一个 ConnectionPoolManager 在第一次调用的时候被建立。


Java语言在设计的时候就使用了很多 设计模式的思想,像 Collection 中的 Iterator 模式,
Event 中的 Observer 模式,Applet 中的 Templete 模式,对象创建时的 Factory 模式,这些
模式大多可以从 Java 的类的命名中体现出来,希望大家在学习 Java 时多注意对 设计模式 的学习。

分享到:
评论

相关推荐

    Java的Singleton模式代码(免资源分)

    在给出的描述中提到“Java的Singleton模式代码”,这提示我们主要关注于如何通过不同的实现方式来创建一个符合Singleton模式的Java类。接下来,我们将详细探讨几种常见的Singleton实现方式及其优缺点。 #### 二、...

    Singleton在Java中的应用.doc

    Singleton模式在很多场景下非常有用,例如数据库连接池、系统配置管理以及Java API中的Runtime类等。 首先,我们来看传统的实现方式,即通过全局对象(如GlobalObject)来维护类的单一实例。这种做法虽然简单,但在...

    (创建型模式)Singleton模式

    Singleton模式的应用场景通常涉及到系统资源的共享,比如数据库连接池、日志服务、线程池等。 在Java或其他面向对象的语言中实现Singleton模式,有多种方法,但核心思想都是控制类的实例化过程。下面我们将详细介绍...

    设计模式课程设计---使用5个以上不同的设计模式完成(java)

    这些模式在Java编程中具有广泛的应用,能够帮助开发者创建更加灵活、可扩展和易于维护的代码。 1. **原型模式(Prototype Pattern)**:原型模式主要用于对象复制,通过克隆已存在的对象来创建新对象,而不是从头开始...

    Android Singleton单例模式Demo

    在Android中,Singleton模式的应用场景包括但不限于: 1. 应用程序配置管理:例如,一个AppConfig类用于存储和管理应用的全局配置信息。 2. 数据库连接管理:在多线程环境下,共享数据库连接池以提高性能和减少资源...

    设计模式之Singleton

    5. **数据库连接池**:数据库连接池在应用启动时初始化,为整个应用提供数据库连接。 单例模式虽然方便,但也有其局限性,比如难以进行单元测试、不易于扩展以及可能导致资源泄露等问题。因此,在使用时需要权衡其...

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

    这种模式在Java中被广泛应用,尤其是在需要控制资源的共享,如数据库连接池,线程池或者配置对象等场景。 (1)设计模式概述 设计模式是软件开发过程中经过大量实践和理论提炼出的解决方案模板,它们代表了在特定上...

    java设计模式&java程序设计

    #### 四、设计模式在Java中的应用 在Java中,设计模式的应用尤为广泛。Java语言本身支持面向对象特性,因此设计模式非常适合Java开发者。例如: - **单例模式:** 在Java中可以通过私有构造函数、静态内部类等方式...

    单例模式Singleton

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心思想是确保一个类在整个应用程序中只有一个实例存在,并提供一个全局访问点来获取这个实例。这种模式在很多场景下非常有用,比如管理系统资源、...

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

    在实际开发中,单例模式常常用于配置管理、缓存、日志、数据库连接池等场景。例如,Spring框架中的ApplicationContext就是通过单例模式来管理所有bean的。然而,需要注意的是,过度使用单例可能导致系统设计过于紧密...

    java中的单例模式

    这种模式在系统中需要控制实例数量,特别是当这个实例需要频繁地被多个对象共享时非常有用,例如数据库连接池、线程池或者配置管理等。 单例模式的核心在于限制类的构造函数对外部的可见性,防止其他对象通过new...

    单例模式的Java示例代码

    在Java中实现单例模式有多种方法,每种都有其特定的优缺点。以下是对单例模式及其Java实现的详细解释。 ### 单例模式的核心思想 1. **唯一性**:确保类只有一个实例。 2. **全局访问点**:提供一个全局访问点,让...

    Java与模式.pdf

    另外,工厂模式常用于创建数据库连接池,如C3P0或DBCP,而单例模式常用于配置管理类,确保在整个应用中只有一个实例存在。 书中还会讨论到面向对象设计的原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换...

    单例模式 Singleton Pattern

    单例模式在Java开发中尤其常见,因为它能够帮助开发者控制对象的创建过程,从而提高系统的性能和效率。 #### 原则与特性 - **单例类只能有一个实例**:这是单例模式的基本原则,确保在整个应用程序中只有一个实例...

    基于Java数据库编程及其应用分析.pdf

    通过了解Java数据库编程的原理、技术以及实际应用案例,可以帮助开发人员更加深入地掌握这项技术,并在实际工作中更有效地运用它。随着技术的不断进步,Java数据库编程也在不断地演进和优化,为其在未来的应用提供了...

    Singleton 设计模式

    Singleton 设计模式是一种常用的设计模式,它用于控制类的实例化过程,确保在整个应用程序中,一个类只有一个实例存在。这种模式常被用于那些需要频繁创建和销毁,且必须全局共享的对象,例如数据库连接、线程池、...

    singleton面试题转

    设计模式是面向对象设计中的一种最佳实践,Singleton模式在很多场景下都很有用,如数据库连接池、缓存管理、日志服务等。但使用时要谨慎,因为单例可能导致系统过于紧密耦合,不便于扩展和维护。在某些情况下,考虑...

    3种设计模式的java小程序

    在这个Java小程序中,单例模式可能用于创建系统的核心组件或者管理资源,如数据库连接池。单例类`Singleton`的构造函数通常是私有的,防止其他类实例化它。通常会有一个静态方法或枚举来保证只有一个实例存在。这样...

    23种JAVA设计模式和15种J2EE设计模式

    单例模式通常用于那些需要频繁访问且创建代价较大的对象,如数据库连接池等。 ##### 1.2 结构型模式 结构型模式关注于如何组合类或对象以获得更大的结构。这些模式提供了灵活的方式来组合简单的对象和类以形成更...

    设计模式(Java 与模式-笔记 二)

    本文主要关注的是Java编程语言中的设计模式,结合“Java与模式-笔记二”的博客内容,我们将深入探讨其中的一些核心设计模式及其在实际开发中的应用。 首先,我们来谈谈单例模式(Singleton)。单例模式确保一个类...

Global site tag (gtag.js) - Google Analytics