1. 程式人生 > 實用技巧 >20192320楊坤第四次實驗

20192320楊坤第四次實驗

單例模式:系統執行時,有且僅有一個例項
  1. 一個類只有一個例項——最基本的
只提供私有構造器,構造方法私有化

   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 }