回顾大话设计模式:
单例模式的特点
-
静态私有的成员变量
-
私有的构造方法
-
公共的静态的入口点方法
分类:
-
懒汉:延迟加载,判断是否是空
-
饿汉: 直接实例化
应用场景: 类功能单一,单例模式无法继承,无法扩展,无法实现,类中没有可以修改的成员变量,如果存在,可以修改的成员变量会存在线程安全问题。在类似解析或读取配置文件的时候可以使用。
/**
* Created by 邢美玲 on 2020/3/2 20:39.
* 读取xml配置文件
* @Version 1.0
*/
public class XmlConfigerReader {
// 实例化数据库实体
private dbEntity dbentity = new dbEntity();
// 采用懒汉模式单例加锁
private static XmlConfigerReader xmlConfigerReader = null;
public static synchronized XmlConfigerReader getXmlConfigerReader(){
if(xmlConfigerReader == null){
xmlConfigerReader = new XmlConfigerReader();
}
return xmlConfigerReader;
}
// 初始化方法读取xml存入实体
private XmlConfigerReader(){
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("src/main/resource/dbconfige.xml"));
Node driverNameNode = document.selectSingleNode("//config/db-info/driver-name");
Node urlNode = document.selectSingleNode("//config/db-info/url");
Node usernameNode = document.selectSingleNode("//config/db-info/user-name");
Node passwordNode = document.selectSingleNode("//config/db-info/pass-word");
String driverName = driverNameNode.getStringValue();
String url = urlNode.getStringValue();
String username = usernameNode.getStringValue();
String password = passwordNode.getStringValue();
// 获取到的值放入实体
dbentity.setDrivername(driverName);
dbentity.setPassword(password);
dbentity.setUrl(url);
dbentity.setUsername(username);
} catch (DocumentException e) {
e.printStackTrace();
}
}
// 返回实体的实例化
public dbEntity getDbentity(){
return dbentity;
}
}
// 其他类调用读取xml配置文件类,返回xml解析后的实体
dbEntity dbentity = XmlConfigerReader.getXmlConfigerReader().getDbentity();