在实训中遇到的第一个设计模式,稍微记录下
“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” ----艾迪生维斯理, 1994
目的: 将类的责任集中到唯一的单体对象中,确保该类只有一个实例,并且为该类提供一个全局访问点实现方法: 1、提供唯一的私有构造器,避免多个单体对象被创建。 2、使用静态域(staticfield)维护实例 3、使用静态方法来监视实例的创建实例化方法: 1、加载时实例化 2、使用时实例化(惰性初始化)实训源码(数据库连接类),加载时实例化
public class DbconMysql { private final static DbconMysql dbm = new DbconMysql(); //静态域维护实例 static InputStream in = null; static Properties p = null; Connection con =null; static{ try { in = DbconMysql.class.getResourceAsStream("jdbc.properties"); p = new Properties(); p.load(in); } catch(Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch(IOException e) { e.printStackTrace(); } } } // 单例模式创建对象 // 唯一私有构造器 private DbconMysql() { } //获取该对象的方法 // 静态方法监视实例的创建 public static DbconMysql getDbconMysql(){ return dbm; } //返回数据库连接 public Connection getCon(){ try { System.out.println(p.getProperty("drivername")); Class.forName(p.getProperty("drivername")); try { con = DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password")); return con; } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } if (con != null) { System.out.println("db connected"); } else { System.out.println("db connect failed"); } return con; } }