jdbc设计模式之单例模式

来源:互联网 发布:云计算好处 编辑:程序博客网 时间:2024/06/06 07:00

单例模式

作为一种常见的设计模式,单例模式的设计概念是"两个私有,一个公有",即私有属性/成员变量和私有构造,以及公有方法,常用于在整个程序中仅调用一次的代码。

具体操作

描述

从单例模式的描述来看,单例模式并不能用于多次频繁调用的设计中,而更适用于程序开头,用于读取资源作启动作用的设计,在这里我们使用读取数据库的使用实例做例子。

例代码

package com.mannoroth.utils;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigManager {    //创建私有属性及成员变量    private static ConfigManager configManager;    private static Properties properties ;    //创建私有构造    private ConfigManager(){        InputStream is = null;        try {                        //创建·properties·做Properties对象            properties = new Properties();            is =  ConfigManager.class.getClassLoader().getResourceAsStream("database.properties");            properties.load(is);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            try {                if (is != null) {                    is.close();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    //公有方法,开启一个口使外部程序得以调用    public static ConfigManager getInstance(){        if (configManager == null) {            configManager = new ConfigManager();        }        return configManager;    }    //通过输入key的值,从文件中获得对应的值    public static String getValues(String key){        return properties.getProperty(key);    }}

单例模式的公有方法存在两个模式,分别为:

1.懒汉模式

//在第一次调用的使用(configManager==null),使自己实例化public static synchronized ConfigManager getInstance(){            if (configManager==null) {                configManager=new ConfigManager();            }        return configManager;    }
上述模式存在缺点,当该模式被多线程同时使用的时候,有可能会因此出现混乱,使两者交错,这时候我们可以通过使用再添加一重锁定(synchronized)的属性来保证线程安全。

解决方法:使用双重锁定

//在方法调用中再加入一重synchronized属性public static synchronized ConfigManager getInstance(){        synchronized (ConfigManager.class) {            if (configManager==null) {                configManager=new ConfigManager();            }        }        return configManager;    }

2.饿汉模式

public static ConfigManager getInstance(){        if (configManager==null) {            configManager=new ConfigManager();        }        return configManager;    }
饿汉模式在创建的同时就提供了一个静态对象供程序调用,不会再发生变化,足矣保证现成安全。

两种模式的区别:

饿汉模式:类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在 懒汉模式:只有当调用getInstance的时候,才会去初始化这个单例。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 富士施乐卡纸怎么办 2608n输稿器卡纸怎么办 轮胎侧面小划痕怎么办 右前轮吃胎怎么办 一次性口罩大了怎么办 彩钢板上锈了怎么办 碳粉盒区域卡纸怎么办 剪刀磨废了怎么办 柴油加到液压油怎么办 减肥管不住嘴怎么办 中介不退押金怎么办 租房遇到黑中介怎么办 固体胶干了怎么办 打胰岛素有硬块怎么办 有人拿刀怎么办防身术 移动wifi的卡怎么办 宠物不能上火车怎么办 电机轴断了怎么办 酸奶没有发酵好怎么办 孩子动手打妈妈怎么办 小孩自控力差怎么办 孩子没有自控力怎么办 孩子自控能力差应该怎么办 小学生自控力差怎么办 高中生自控力差怎么办 很懒管不住自己怎么办 自制力差怎么办知乎 大腿后面筋拉伤怎么办 我现在急需用钱怎么办 满月后还有黄疸怎么办 新生儿黄疸高15怎么办 新生儿黄疸高怎么办17 满月小孩黄疸高怎么办 小孩半夜不睡觉怎么办 宝宝夜晚不睡觉怎么办 满月婴儿吃太多怎么办 月子小孩不睡觉怎么办 月子宝宝不睡觉怎么办 刚满月婴儿感冒怎么办 新生儿咳嗽吐奶怎么办 刚满月宝宝干咳怎么办