單例模式 Singleton Pattern

2021-09-29 16:56:56 字數 2010 閱讀 5650

確保乙個類在任何情況下絕對只有乙個例項,並提供乙個全域性訪問點。

public

class

hungrysingleton

public

static hungrysingleton getinstance()

}

或者使用靜態**塊

public

class

hungrysingleton2

private

hungrysingleton2()

public

static hungrysingleton2 getinstance()

}

外部類呼叫的時候才會載入

最簡單實現的懶漢模式

public

class

lazysingleton

private

static lazysingleton lazysingleton=null;

public

static lazysingleton getinstance()

}

寫執行緒類

public

class

exectorthread

implements

runnable

}

進行測試

public

class

lazysingletontest

}

public

class

lazysingleton

private

static lazysingleton lazysingleton=null;

public

synchronized

static lazysingleton getinstance()

}

因為只有在類被建立使用的時候才需要進行加鎖操作,為了避免非必要的加鎖,所以只有在第一次的時候才加鎖。

public

class

lazysingleton

private

volatile

static lazysingleton lazysingleton=null;

public

static lazysingleton getinstance()

}}return lazysingleton;

}}

阻塞並不是基於整個類的阻塞,而是在getinstance()方法內部的阻塞

用到sychronized總歸是上鎖了,對程式效能還是存在一定的影響。

public

class

lazyinnerclasssingleton

public

static

final lazyinnerclasssingleton getinstance()

private

static

class

lazyholder

}

這種方法兼顧了餓漢式單例模式的記憶體浪費的問題和synchronized的效能問題,內部類在方法呼叫之前初始化。

可以利用反射機制,獲得私有的構造方法,並進行強制訪問,然後進行多次初始化操作,從而可以建立多個物件。

進行**優化:

public

class

lazyinnerclasssingleton

}public

static

final lazyinnerclasssingleton getinstance()

private

static

class

lazyholder

}

待補充

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...