网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

Java EE 只需一个数据引擎访问点的单例模式

    有些时候,允许自由创建某个类的实例没有意义,还可能造成系统性能下降(因为创建对象所带来的系统开销问题)。例如整个系统只有一个窗口管理器,只有一个假脱机打印设备;在Java EE应用中可能只需要一个数据库引擎访问点,Hibernate访问时只需要一个SessionFactory实例,如果在系统中为它们创建多个实例就没有太大的意义。

    如果一个类始终只能创建一个实例,则这个类被称为单例类,这种模式就被称为单例模式。

    对Spring框架而言,可以在配置Bean实例时指定scope="singleton"来配置单例模式。不仅如此,如果配置元素时没有指定scope属性,则该Bean实例默认是单例的行为方式。
 
    Spring推荐将所有业务逻辑组件、DAO组件、数据源组件等配置成单例的行为方式,因为这些组件无须保存任何用户状态,故所有客户端都可共享这些业务逻辑组件、DAO组件,因此推荐将这些组件配置成单例模式的行为方式。
 
    如果不借助Spring框架,我们也可手动实现单例模式。为了保证该类只能产生一个实例,程序不能允许自由创建该类的对象,而是只允许为该类创建一个对象。为了避免程序自由创建该类的实例,我们使用private修饰该类的构造器,从而将该类的构造器隐藏起来。

    将该类的构造器隐藏起来,则需要提供一个public方法作为该类的访问点,用于创建该类的对象,且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不可能是对象,只能是类)。

    除此之外,该类还必须缓存已经创建的对象,否则该类无法知道是否曾经创建过实例,也就无法保证只创建一个实例。为此该类需要使用一个静态属性来保存曾经创建的实例,且该属性需要被静态方法访问,所以该属性也应使用static修饰。

    基于上面的介绍,下面程序创建了一个单例类。

    程序清单:codes\09\9.3\Singleton\TestSingleton.java

    class Singleton

    {

    //使用一个变量来缓存曾经创建的实例

    private static Singleton instance;

    //将构造器使用private修饰,隐藏该构造器

    private Singleton(){}

    //提供一个静态方法,用于返回Singleton实例

    //该方法可以加入自定义的控制,保证只产生一个Singleton对象

   public static Singleton getInstance()

    {

    //如果instance为null,表明还不曾创建Singleton对象

    //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法

    if (instance == null)

    {

    //创建一个Singleton对象,并将其缓存起来

    instance = new Singleton();

    }

    return instance;

    }

    }

    public class TestSingleton
 
    { 

    public static void main(String[] args)

    {

    //创建Singleton对象不能通过构造器,只能通过getInstance方法

    Singleton s1 = Singleton.getInstance();

    Singleton s2 = Singleton.getInstance();

    //将输出true
 
    System.out.println(s1 == s2);

    }

    }

    上面程序中第一行粗体字代码使用了一个静态属性来保存已创建的Singleton实例,程序第二段粗体字代码用于判断系统是否已经创建过Singleton实例——如果已经创建过Singleton实例,则直接返回该Singleton实例即可。

    正是通过上面第二段粗体字代码提供的控制逻辑,从而保证了Singleton类只能产生一个实例。所以在TestSingleton类的main方法中看到两次产生的Singleton对象实际上是同一个对象。

    在Java EE应用中,单例模式是一种应用非常广泛的设计模式,应用中许多组件都只需要单个实例,下面介绍的工厂模式里的工厂也只需要单个实例……

    使用单例模式主要有如下两个优势:

    减少创建Java实例所带来的系统开销。

    便于系统跟踪单个Java实例的生命周期、实例状态等。

 

热门搜索:TLP1008TEL 2986122 2320335 SS7619-15 LC1200 02B5000JF UL24CB-15 PS480806 6SPDX 2858030 602-15 PDUMH15 TLP810NET 1301380020 SS240806 SS7415-15 N060-004 SS361220 RBC11A 2838283 2320089 BT152-500R/600R TLP712B PS-415-HGULTRA TLM812SA
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质