设计模式之--单例模式

来源:互联网 发布:苏州大学网络认证自助 编辑:程序博客网 时间:2024/06/04 20:05
最近写关于手机数据库SqlLite创建使用的时候老是遇到数据库未关闭的警告,中间还使用了多线程访问数据库,老是提示数据库被锁定的exception,后来觉得老是打开、关闭数据库太麻烦了,就想用单例模式解决。以下是学习心得:

在某种程度上,单例模式是限制了而非改进了类的创建。单例模式被归结为创建类型模式。他保证了一个类有且仅有一个实例,并且提供了一个访问该实例的全局访问点(static)。在进行程序设计碰到的大量实例中,往往需要保证一个类只能有一个实例。例如在数据库访问的时候。。。
1、利用静态方法创建单例
    要创建一个具有唯一实例的类,最简单的方法是在类的内部嵌入一个静态变量,当创建第一个实例时设置该变量,然后当你每次调用构造函数的时候,检查该静态变量。静态变量是仅有一个实例的变量,而不论存在多少个类的实例。为了防止多次实例化类,应该将构造函数设置私有,这样就只能从该类的静态方法内部创建一个实例。然后创建一个实例方法,返回一个实例。

(1)饿汉式:静态初始化方式,在启动加载单例类时就实例化对象,只实例化一次,以后用到的时候就不需要再去实例化了,加载类的时候速度比较慢,但以后获得对象时的速度比较快,该对象从加载到应用结束一直占用资源。

(2) 懒汉式:相当于一个延迟加载机制,即你需要这个对象时候才去实例化,加载类的时候速度比较快,但以后获得对象时的速度比较慢,该对象在整个应用的生命周期只有一部分时间占用资源。面临多线程访问的安全性问题,需要做双重锁定处理才可以保证安全。




双锁机制:
public class Singleton {
        private static Singleton instance = null;
        private Singleton() { }
        public static Singleton getInstance() {
            if (instance == null) {//第一次检查
                synchronized(Singleton.class) {
                    //第二次检查
                    if (instance == null) { 
                        instance = new Singleton(); 
                    }
             }
         } 
        return instance; 
    } 
}
0 0
原创粉丝点击