20192320楊坤第四次實驗
阿新 • • 發佈:2020-10-31
單例模式:系統執行時,有且僅有一個例項
兩者對比:
- 一個類只有一個例項——最基本的
2. 它必須自行建立這個例項
定義了靜態的該類私有物件3. 它必須自行向整個系統提供這個例項
提供了一個靜態的公有方法,返回建立或者獲取本身的靜態私有物件 一. 懶漢模式:在類載入時不建立例項,採用延遲載入的方式,在執行呼叫時建立例項 特點:執行緒不安全 延遲載入(lazy Loading) 所用資源少 如何解決:同步(synchronized) 加鎖 二. 餓漢模式:在類載入的時候,就完成了初始化 特點:執行緒安全,不具備延遲載入特性兩者對比:
1 package cn.pojo; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 /** 8 * 沒有撤退可言 9 **/ 10 public class BaseDao1 { 11 private String url="jdbc:mysql://location:3306/wxy"; 12 private String driName="com.mysql.jdbc.Driver";13 private String dbname="root"; 14 private String dbpwd="1766241225"; 15 private static Connection conn=null; 16 private static BaseDao1 db=null; 17 18 private BaseDao1(){ 19 try { 20 Class.forName(driName); 21 conn= DriverManager.getConnection(url,dbname,dbpwd);22 }catch (SQLException e){ 23 e.printStackTrace(); 24 }catch (ClassNotFoundException e){ 25 e.printStackTrace(); 26 } 27 } 28 29 // 懶漢模式+執行緒安全 30 public static synchronized Connection getConn(){ 31 if (conn==null){ 32 new BaseDao1(); 33 } 34 return conn; 35 } 36 // 靜態內部類 37 public static class BaseDaoHelper{ 38 private static final BaseDao1 db=new BaseDao1(); 39 } 40 // 餓漢單例+延遲載入 41 public static BaseDao1 getbd(){ 42 if (db==null){ 43 db=BaseDaoHelper.db; 44 } 45 return db; 46 } 47 }