码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式实用案例之单例模式

时间:2016-12-22 19:56:45      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:hibernate   erro   数据   ssi   程序   system   hiberna   href   java ee   

单例模式的应用场景是,在系统中有一些东西提供基础的、固定的服务,不需要灵活的操作和变动,以get操作为主。

所以我们不需要创建类的对象去操作,这样可以提升系统的性能和效率。

比如获取配置文件信息、获取数据库连接池等。

我们来看一下获取配置文件信息的例子:

import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;

/**
 * 配置辅助类
 */
public class ConfigUtil {
    private static Prop prop = null;
    static{
        if(prop == null)
            prop = PropKit.use("CPSIS.properties");
    }
    /**
     * 获取实时数据库配置文件属性对象
     * @return
     */
    public static Prop getProp(){
        return prop;
    }
    /**
     * 获取实时数据库实现接口类
     * @return
     */
    public static String getRtdbClassname(){
        return prop.get("rtdb.classname");
    }
  /**
     * 下面还可以有很多其他的静态get函数,我们通过这些函数去获取配置信息
     * @return
     */
  …… 
}

单例模式需要配合static属性和static方法来使用。因为只有类的static属性和方法才不需要创建变量就能访问,这样我们就能利用这个静态属性去存储我们只需要一个实例的对象。

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

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

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

关于静态变量和静态方法的理解,请参考百度。

上文的代码中使用了static块来初始化单例对象,也可以通过静态方法来做:

public class Singleton
    {
        private static Singleton instance;
        private Singleton()
        {
        }
        public static Singleton GetInstance()
        {
            return instance ?? (instance = new Singleton());
        }
    }

补充,hibernate的应用

hibernate中的SessionFactory是一个重量级的类,创建该类的对象实例会耗费比较多的系统资源,如果每次需要时都创建一个该类的实例,显然会降低程序的执行效率,所以经常将对该类的实例化放在一个static{}中,只需第一次调用时执行,提高程序的执行效率,如下:

static {
     try {
   configuration.configure(configFile);
   sessionFactory = configuration.buildSessionFactory();
  } catch (Exception e) {
   System.err.println("%%%% Error Creating SessionFactory %%%%");
   e.printStackTrace();
  }
    }

 

设计模式实用案例之单例模式

标签:hibernate   erro   数据   ssi   程序   system   hiberna   href   java ee   

原文地址:http://www.cnblogs.com/fleeyone/p/6212063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!