概念:
一個(gè)類有且只有一個(gè)實(shí)例;
實(shí)現(xiàn)方式:
兩種方式副编,餓漢模式和懶漢模式
1:餓漢模式
1:設(shè)置類的構(gòu)造函數(shù)修飾符為 private
2:聲明一個(gè) private 的類對(duì)象,并且實(shí)例化對(duì)象
3:創(chuàng)建一個(gè) public static 的 getInstance 方法流强,返回值為第二步實(shí)例化的對(duì)象
4:通過對(duì)象 .getInstance 方法得到對(duì)象痹届,而且重復(fù)獲得對(duì)象的地址一致
public class Singleton {
/* 持有私有靜態(tài)實(shí)例,防止被引用 */
private static Singleton instance = new Singleton();
/* 私有構(gòu)造方法打月,防止被實(shí)例化 */
private Singleton() {
}
/* 靜態(tài)工程方法队腐,創(chuàng)建實(shí)例 */
public static Singleton getInstance() {
return instance;
}
}
2:懶漢模式:
1:和餓漢一致
2:聲明一個(gè) private 的類對(duì)象,不實(shí)例化對(duì)象
3:創(chuàng)建一個(gè) public static 的 getInstance 方法奏篙,方法中先判斷對(duì)象是否存在柴淘,如果不存在,則實(shí)例化對(duì)象秘通,如果存在为严,則直接返回對(duì)象
4:通過對(duì)象.getInstance 方法得到對(duì)象,與餓漢模式一致
public class Singleton {
/* 持有私有靜態(tài)實(shí)例肺稀,防止被引用第股,此處賦值為null,目的是實(shí)現(xiàn)延遲加載 */
private static Singleton instance = null;
/* 私有構(gòu)造方法话原,防止被實(shí)例化 */
private Singleton() {
}
/* 靜態(tài)工程方法夕吻,創(chuàng)建實(shí)例 */
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
兩種模式的區(qū)別:
1:餓漢模式是線程安全的,懶漢模式是線程不安全的
2:餓漢模式在類加載時(shí)比較慢稿静,但是獲取對(duì)象時(shí)比較快梭冠;而懶漢模式在類加載時(shí)比較快,獲取對(duì)象時(shí)比較慢改备;因?yàn)轲I漢模式在類加載的時(shí)候會(huì)實(shí)例化對(duì)象控漠,而懶漢模式在第一次獲得對(duì)象時(shí)實(shí)例化對(duì)象
掃描下面二維碼,關(guān)注我的公眾號(hào)哦!Q谓荨偶翅!