简单理解设计模式之单例模式

来源:互联网 发布:钢材进销存软件免费版 编辑:程序博客网 时间:2024/06/05 19:23

1.什么是单例模式?我们为什么要用单例模式?

首先我们要知道我们为什么要用单例模式,其实在很多的时候我们都用到了单例模式,这也是很经常要用到的,比如一个对象我们只需要它实例化一次,不允许它任意的创建。其实这就是单例模式,就是我们要一个对象只实例化一次,比如数据库的连接。。

2.单例模式有哪些?

单例模式分为两种:一种是懒汉模式,另一种是饿汉模式。

3.怎么创建懒汉模式的单例模式

步骤如下:

第一步:实例化该类的构造函数,

第二步:私有静态化实例对象,保证只在本类执行

第三步:返回一个共有的函数,返回该实例对象

懒汉模式跟饿汉模式的根本区别就是是否先创建对象实例,如果先创建就是懒汉模式,要用到的时候再创建就是饿汉模式

懒汉模式代码如下:

package com.hibernate.test01.dao.pojo;public class OneExample {//保证类私有,不允许外部创建对象private OneExample(){}//保证类只在本类中执行private static OneExample oneExample = new OneExample();//返回一个共有的方法,返回改类的实例化对象public static OneExample getOneExceptionInstance(){return oneExample;}}

饿汉模式代码如下:

package com.hibernate.test01.dao.pojo;//饿汉模式单例模式public class OneExample {//保证类私有,不允许外部创建对象private OneExample(){}//保证类只在本类中执行,先不实例化对象private static OneExample oneExample;//返回一个共有的方法,返回改类的实例化对象public static OneExample getOneExceptionInstance(){if(oneExample==null){oneExample = new OneExample();return oneExample;}else{return oneExample;}}
下面怎么获取hibernate框架中的SessionFactory的单例:

package com.hibernate.test01;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;public class HibernateSessionFactory {private static SessionFactory sessionFactory;private HibernateSessionFactory(){}public static SessionFactory getSessionFactory(){if(sessionFactory!=null){return sessionFactory;}else{Configuration config = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();sessionFactory = config.buildSessionFactory(serviceRegistry);return sessionFactory;}}}

需要注意的是这些都不是线程安全的,在多线程下访问会出现跟我们期望的值不相等,后面我会再介绍。



0 0
原创粉丝点击