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


  【赛迪网讯】有些时分, 允许自在创立某个类的实例没有意义, 还可能形成系统功能下降(由于创立对象所带来的系统开支成果)。 例如整个系统只有一个窗口管理器, 只有一个假脱机打印设备;在javaee应用中可能只需求一个数据库引擎访问点, hibernate访问时只需求一个sessionfactory实例, 假设在系统中为它们创立多个实例就没有太大的意义。 假设一个类一直只能创立一个实例, 则这个类被称为单例类, 这种模式就被称为单例模式。 对spring框架而言, 可以在配置bean实例时指定scope=singleton来配置单例模式。 不仅如此, 假设配置

  JAVA元素时没有指定scope属性, 则该bean实例默认是单例的行为方式。 spring引荐将一切业务逻辑组件、dao组件、数据源组件等配置成单例的行为方式, 由于这些组件无须保存任何用户状态, 故一切客户端都可共享这些业务逻辑组件、dao组件, 因而引荐将这些组件配置成单例模式的行为方式。 假设不借助spring框架, 我们也可手动实现单例模式。 为了保证该类只能发生一个实例, 顺序不能允许自在创立该类的对象, 而是只允许为该类创立一个对象。 为了避免顺序自在创立该类的实例, 我们使用private修饰该类的结构器, 从而将该类的结构器隐藏起来。 将该类的结构器隐藏起来, 则需求提供一个public方法作为该类的访问点, 用于创立该类的对象, 且该方法必需使用static修饰(由于调用该方法之前还不存在对象, 因而调用该方法的不可能是对象, 只能是类)。 除此之外, 该类还必需缓存已经创立的对象, 否则该类无法知道是否已经创立过实例, 也就无法保证只创立一个实例。 为此该类需求使用一个静态属性来保存已经创立的实例, 且该属性需求被静态方法访问, 所以该属性也应使用static修饰。 基于下面的引见, 下面顺序创立了一个单例类。

  下面顺序中第一行粗体字代码使用了一个静态属性来保存已创立的singleton实例, 顺序第二段粗体字代码用于判断系统是否已经创立过singleton实例——假设已经创立过singleton实例, 则直接前往该singleton实例即可。 正是经过下面第二段粗体字代码提供的控制逻辑, 从而保证了singleton类只能发生一个实例。 所以在testsingleton类的main方法中看到两次发生的singleton对象实际上是同一个对象。 在javaee应用中, 单例模式是一种应用十分广泛的设计模式, 应用中许多组件都只需求单个实例, 下面引见的工厂模式里的工厂也只需求单个实例……使用单例模式主要有如下两个优势:增加创立java实例所带来的系统开支。 便于系统跟踪单个java实例的生命周期、实例状态等。
文章由女人缩阴有用吗整理,收集辛苦,希望能保留出处。

posted on 2011-05-08 08:46  jiyizhen3721  阅读(155)  评论(0编辑  收藏  举报