23種設計模式 (1)單例模式

2021-08-22 04:49:42 字數 1507 閱讀 5513

定義

確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項

單例模式優點

單例模式的缺點

//單例模式為什不能增加介面?

//因為對介面對單例模式沒有任何意義,它要求「自行例項化」,並提供單一例項,介面或者抽象類不可能被例項化

單例的使用場景

​ 在乙個系統中,要求類有且僅有乙個物件,如果出現多個物件會有「不良反應」,可以採用單例。

單例模式的注意事項

---------------------餓漢單例(執行緒安全)----------------

public

class

singleton

public

static singleton getsingleton()

public

static

void

dosomething()

}---------------------懶漢單例(執行緒不安全)--------------

public

class

singleto

public

static singleto getsingleto()

return singleto;

}}

​ 如果乙個物件執行到了singleto= new singleto();,但是還沒獲取到物件(物件初始化需要時間)。第二個執行緒也執行singleto==null,那麼 也會產生乙個新物件,因此產生了2個物件。

​ 解決執行緒安全可以使用synchronized,但不是最優秀的單例模式。

​ 其次,需要考慮物件複製。物件預設是不可被複製的,若實現了cloneable介面,通過複製創造乙個新物件,物件複製不是通過呼叫類的建構函式。因此即使使用私有建構函式,物件仍然可以被複製。解決辦法是單例類不要實現cloneable

單例中允許存在2個物件

public

class

emperor

}public

static emperor getinstance()

private

emperor()

// 傳入名稱,建立乙個物件

private

emperor(string name)

public

static

void

say()

public

static

void

main(string args)

/** 第1個大臣 拜見的是皇帝1

* 第2個大臣 拜見的是皇帝1

* 第3個大臣 拜見的是皇帝2

* 第4個大臣 拜見的是皇帝1

* 第5個大臣 拜見的是皇帝2*/}

}

23種設計模式 1單例模式

1.單例模式 singleton pattern 是一種簡單的設計模式,它的定義如下 為了確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。2.通用 如下 class singleton 通過該方法獲得例項化物件 public static songleton getinstance...

23種設計模式1 單例模式

單例模式 採取一定的方法保證在整個的軟體系統中,對某個類 只能存在乙個物件例項 並且該類只提供乙個取得其物件例項的方法。比如 sessionfactory 構造器私有化 類的內部建立物件 向外暴露乙個靜態的公共方法 2.2.1 方式一public class singleton 2.類的內部建立物件...

23種設計模式 單例模式

某些情況,如 執行緒池,乙個專案中匯流排程數量以及生命週期,可能需要統一控制 如果執行緒池自身可建立多個例項,那麼就無法統一控制,此時,只要能控制線程池物件的數量為乙個,那麼就可以實現統一控制的目標 注意 現實中真正使用純的單例模式並不多 如 spring bean 通過配置來決定是否使用單例 執行...