單例模式是指某個(gè)類(lèi)只允許存在一個(gè)實(shí)例對(duì)象,例如在打印機(jī)打印文件時(shí),一次只允許打印一個(gè)文件;一個(gè)程序里的相同彈出對(duì)話框只允許有一個(gè)。
單例模式通常在需要控制對(duì)象數(shù)量以節(jié)省資源消耗的情況,在實(shí)際軟件設(shè)計(jì)中非常常用,特別是在多線程多進(jìn)程時(shí),可以避免產(chǎn)生多個(gè)實(shí)例對(duì)象,造成資源浪費(fèi)。
實(shí)現(xiàn)的方法是在類(lèi)里創(chuàng)建一個(gè)private構(gòu)造函數(shù),這樣其他類(lèi)就無(wú)法通過(guò)new的方式生成其實(shí)例,只能通過(guò)類(lèi)內(nèi)部所定義的getInstance()方法生成實(shí)例,具有私有的構(gòu)造函數(shù)是單例模式的一個(gè)顯著特征。單例模式的一個(gè)簡(jiǎn)單示例類(lèi)圖如下圖所示:
SingleInstance類(lèi)的代碼如下:
package singleton;
public class SingleInstance {
//創(chuàng)建類(lèi)時(shí)創(chuàng)建一個(gè)實(shí)例
private static SingleInstance singleInstance=new SingleInstance();
//私有構(gòu)造函數(shù)
private SingleInstance() {};
//生成單實(shí)例
public static SingleInstance getSingleInstance() {
return singleInstance;
}
public void showMessage() {
System.out.println("單例模式信息!");
}
}
調(diào)用SingleInstance生成對(duì)象的錯(cuò)誤方法:用new方法生成對(duì)象時(shí),編譯器會(huì)報(bào)錯(cuò)。
調(diào)用SingleInstance生成對(duì)象的正確方法:
public class SingletonPattern {
public static void main(String[] args) {
SingleInstance singleInstance = SingleInstance.getSingleInstance();
singleInstance.showMessage();
/*錯(cuò)誤的調(diào)用方法
SingleInstance singleInstance = new SingleInstance();
*/
}
}
-
打印機(jī)
+關(guān)注
關(guān)注
10文章
791瀏覽量
46688 -
編譯器
+關(guān)注
關(guān)注
1文章
1653瀏覽量
49843
發(fā)布評(píng)論請(qǐng)先 登錄
dlpc3470 Splash Pattern模式為什么會(huì)設(shè)置最大Pattern周期,這個(gè)最大周期能否更改?
DLP4500每個(gè)pattern的曝光時(shí)間怎么設(shè)置?
請(qǐng)問(wèn)external pattern sequence子模式的正確使用方式是什么?
DLP中video模式與pattern模式有什么區(qū)別?
2018年P(guān)ython面試必看的10個(gè)面試題
OpenHarmony中的單例模式實(shí)踐
利用golang優(yōu)雅的實(shí)現(xiàn)單實(shí)例分享
關(guān)于iOS開(kāi)發(fā)單例使用問(wèn)題
單例模式詳解
單例模式分成餓漢模式和懶漢模式解析
為什么C++單例模式不能直接全部使用static變量和static函數(shù)呢?
嵌入式C語(yǔ)言軟件設(shè)計(jì)之裝飾器模式(Decorator Pattern)
Python實(shí)現(xiàn)單例模式的五種寫(xiě)法
php設(shè)計(jì)模式和應(yīng)用場(chǎng)景
OpenHarmony鴻蒙開(kāi)發(fā)學(xué)習(xí):【Ability的啟動(dòng)模式】

評(píng)論