單例設計模式
單例模式介紹
1. 所謂類的單例設計模式,就是采取一定的方法保證在整個的軟件系統中 2. 分類(兩種方式) (2)懶漢式
單例模式的實現方法
(1)類的內部創建對象 (3)向外暴露一個靜態的公共方法:用于返回對象(getinstance)
單例模式的經典案例
javaSE 標準類中,java.lang.Runtime 就是經典 的單例模式 。
一、餓漢式
解釋:只要類加載,無論是否使用該類的實例對象,都會在類中創建對象實例
形象理解:很餓,饑渴難耐,無論是否使用該對象,都會創建
代碼示例
package pattern. sigal ; public class main { public static void main ( String [ ] args) { girlfriend instance = girlfriend. getinstance ( ) ; System . out. println ( instance) ; }
} class girlfriend{ private String name; private static girlfriend gf = new girlfriend ( "女朋友" ) ; private girlfriend ( String name) { System . out. println ( "構造器被調用" ) ; this . name = name; } public static girlfriend getinstance ( ) { return gf; } @Override public String toString ( ) { return "girlfriend{" + "name='" + name + '\'' + '}' ; }
}
構造器被調用
girlfriend{ name= '女朋友' }
二、懶漢式
解釋:只有在對象被使用時才會創建
形象理解:很懶,有需求了才做
代碼示例
package pattern. lazy ; public class main { public static void main ( String [ ] args) { Cat cat = Cat . getInstance ( ) ; System . out. println ( cat) ; Cat cat1 = Cat . getInstance ( ) ; System . out. println ( cat1) ; System . out. println ( cat == cat1) ; }
} class Cat { private String name; private static Cat cat; private Cat ( String name) { System . out. println ( "構造器被調用" ) ; this . name = name; } public static Cat getInstance ( ) { if ( cat == null ) { cat = new Cat ( "小貓" ) ; } return cat; } @Override public String toString ( ) { return "Cat{" + "name='" + name + '\'' + '}' ; }
}
構造器被調用
Cat { name= '小貓' }
Cat { name= '小貓' }
true
餓漢式 和懶漢式 對比
1. 最主要的區別:創建對象的時機不同 2. 關于線程安全問題 (1)餓 漢式:不存在 補充說明:后面學習線程后,再完善 (1)餓漢式:存在 浪費資源的可能 解釋:只要類加載,就會執行創建對象 實例,如果對象 實例沒有被使用 ,就造成了資源的浪費 解釋:懶漢式模式下,對象在使用時才創建 ,就不存在這個問題。