使用单态(Singleton)模式获取数据库操作对象
来源:互联网 发布:dwg转换pdf软件 编辑:程序博客网 时间:2024/06/11 08:46
开始先介绍下单态模式,也就是单例模式,我们主要区别于Spring中的原型模式,单例模式就是保证一个类只存在一个实例,就是只初始化一次,第一次完成初始化以后,重复使用的时候,返回的都是这个实例,而且不是重新去new一个新的,这就在DAO层中比较常见,我们定义一个工厂类(seesionFactory),不用每次都去New个用,好处在于节省了内存和时间,但是如果你对象里面的属性值已经改变的话,就不适合使用单例了,只能重新New个,我们一般的用法Spring的Action层就是使用这个原型,可以创建多次实例。需要说一下,使用单例虽然节省了内存和时间,但是在多线程并发场景中容易出线程安全的问题,有一篇文章可以学习下:http://blog.csdn.net/liushuijinger/article/details/9069801,下面写下常用工厂类获取操作数据库对象实例的单态代码模板:
import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;public final class EMF {private final static EntityManagerFactory emfInstance= Persistence.createEntityManagerFactory("hbase-filesharesys");public static synchronized EntityManagerFactory getInstance() { return emfInstance;}}
上面模板使用的是JPA,通过Persistence.createEntityManagerFactory("persistence文件位置")来获取数据库操作对象。其实阅读了上面文章,我发现这种方式并不是最安全的,下面在补充下较为完善的单态模式代码:
//内部类实现懒汉式public class Singleton { private static class SingletonHolder{ //单例变量 private static Singleton instance = new Singleton(); } //私有化的构造方法,保证外部的类不能通过构造器来实例化。 private Singleton() { } //获取单例对象实例 public static Singleton getInstance() { System.out.println("我是内部类单例!"); return SingletonHolder.instance; }}
懒汉式(避免上面的资源浪费)、线程安全、代码简单。因为java机制规定,内部类SingletonHolder只有在getInstance()方法第一次调用的时候才会被加载(实现了lazy),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance。
1 0
- 使用单态(Singleton)模式获取数据库操作对象
- 单列模式(Singleton Pattern、单态模式、单件模式、对象创建型模式)
- 面向对象:单例模式(Singleton)
- 单态模式(singleton)
- Java单态模式(Singleton模式)
- Java单态模式(Singleton模式)
- Java单态模式(Singleton模式)
- 单态模式(singleton)
- @单态模式 Singleton
- Singleton 单态模式
- Singleton单态模式
- 单态模式 - singleton
- 单态模式Singleton
- 单态模式Singleton
- 单例模式(Singleton)(对象创建型模式)
- 设计模式单件(Singleton)---对象创建型模式
- Singleton模式(单态模式)
- 设计模式之Singleton(单态)?
- winform dataGridView 点击列标题排序
- 一个无线供电的超外差电路制作过程
- MFC 声音的播放和录音的实现(一)
- 数据结构复习——第三章:栈和队列
- How to convert an input image from one color space to another space
- 使用单态(Singleton)模式获取数据库操作对象
- Leetcode Factorial Trailing Zeroes
- 【面向对象】——设计模式之行为型模式(一)
- 汇编语言的assume
- 单链表操作1
- Installing Eclipse to Ubuntu 13.10, 13.04, 12.04
- 飞鸽传书大屏幕平板电脑配合触控笔
- Java基础----LineNumberReader
- mysql 导出 EXCEL