設計模式之單例模式(二)

2021-08-28 04:04:01 字數 1264 閱讀 4016

單例模式

顧名思義,單例模式就是保證某個類只有乙個例項。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以避免兩個列印作業同時輸出到印表機中。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。

1.餓漢模式

public class hungrysingleton 

private static hungrysingleton singleton = new hungrysingleton();

//靜態工廠方法返回實體類

public static hungrysingleton getinstance()

}

singleton通過將構造方法限定為private避免了類在外部被例項化,在同乙個虛擬機器範圍內,singleton的唯一例項只能通過getinstance()方法訪問。

測試:

public class test 

}

輸出結果:

可以看見是相同的控制代碼

但是!!!!!我們可以用反射生成構造私有化的類。如下:

public class test1 

}for (constructor constructor:constructors)

}} catch (exception e) }}

結果為:

表明其生成了兩個例項,所以單例模式是不考慮反射的情況下是單例模式。

2.懶漢模式

public class lazysingleton 

private static lazysingleton single = null;

public static lazysingleton getinstance()

return single;}}

懶漢模式在多執行緒中可能出現多個實體,所以使用時應該注意可以通過加類鎖,確保執行緒安全。

python設計模式之單例模式(二)

上次們討論的是gof的單例設計模式,該模式是指 乙個類有且只有乙個物件。通常我們需要的是讓例項共享乙個相同的裝態 比如資料庫連線。alex martelli的建議的是開發人員應該關注狀態和行為,而不是同一性,因此它也被稱為monostate 單態 模式。先說說 monostate 這個單詞的意思,設...

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二) 單例模式

單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...