Java入门之初识设计模式---单列模式
設(shè)計(jì)模式
是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案
單例模式
目的:使得類的一個(gè)對(duì)象成為該類系統(tǒng)中的唯一實(shí)例
定義:一個(gè)類有且僅有一個(gè)實(shí)例,并且自行實(shí)例化向整個(gè)系統(tǒng)提供
因此,設(shè)計(jì)要點(diǎn)是:
某個(gè)類只能有一個(gè)實(shí)例
必須自行創(chuàng)建實(shí)例
必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
實(shí)現(xiàn):
只提供私有的構(gòu)造方法
含有一個(gè)該類的靜態(tài)私有對(duì)象
提供一個(gè)靜態(tài)的公有方法用于創(chuàng)建、獲取靜態(tài)私有對(duì)象
代碼實(shí)現(xiàn)方案:
餓漢式
懶漢式
餓漢式
類加載時(shí),靜態(tài)實(shí)例對(duì)象完成了實(shí)例化操作;空間換時(shí)間。(對(duì)象創(chuàng)建過程中實(shí)例化)
餓漢式線程安全
新建文件SingletonOne.java
/** * 餓漢式 */ public class SingletonOne {//1.創(chuàng)建類中的私有構(gòu)造函數(shù)private SingletonOne(){}//2.創(chuàng)建該類型的私有靜態(tài)實(shí)例private static SingletonOne instance = new SingletonOne();//3.創(chuàng)建公有靜態(tài)方法返回靜態(tài)實(shí)例對(duì)象public static SingletonOne getInstance(){return instance;} }新建文件Test.java
public class Test {public static void main(String[] args) {SingletonOne one = SingletonOne.getInstance();SingletonOne two = SingletonOne.getInstance();System.out.println(one);System.out.println(two);} }輸出結(jié)果可以看到是同一個(gè)類的地址。
懶漢式
類加載時(shí)并未實(shí)例化,第一次使用時(shí)才進(jìn)行實(shí)例化;時(shí)間換空間。(靜態(tài)公有方法中實(shí)例化)
懶漢式存在線程風(fēng)險(xiǎn)
懶漢式線程安全的解決方案:(此處大致介紹下,后邊在線程篇會(huì)詳細(xì)介紹)
同步鎖
雙重校驗(yàn)鎖
靜態(tài)內(nèi)部類
枚舉
新建文件:SingletonOne.java
public class SingletonTwo {//1.創(chuàng)建私有構(gòu)造方法private SingletonTwo(){}//2.創(chuàng)建靜態(tài)的該類實(shí)例對(duì)象private static SingletonTwo instance = null;//3.創(chuàng)建開放的靜態(tài)方法提供實(shí)例對(duì)象public static SingletonTwo getInstance(){if(instance == null)instance = new SingletonTwo();return instance;} }新建文件Test.java
public class Test {public static void main(String[] args) {SingletonTwo one = SingletonTwo.getInstance();SingletonTwo two = SingletonTwo.getInstance();System.out.println(one);System.out.println(two);} }輸出結(jié)果同上餓漢式代碼
單列模式的特點(diǎn)以及應(yīng)用場景
優(yōu)點(diǎn):
在內(nèi)存中只有一個(gè)對(duì)象,節(jié)省內(nèi)存
避免頻繁的創(chuàng)建和銷毀對(duì)象,提高性能
避免對(duì)共享資源的多重占用
缺點(diǎn):
擴(kuò)展比較困難
如果實(shí)例化后的對(duì)象長期不利用,系統(tǒng)將默認(rèn)認(rèn)為垃圾,進(jìn)行回收,造成對(duì)象狀態(tài)丟失
使用場景:
創(chuàng)建對(duì)象時(shí)占用資源過多,但同時(shí)又需要用到該類對(duì)象
對(duì)系統(tǒng)內(nèi)資源要求統(tǒng)一讀寫,如讀寫配置信息
當(dāng)多個(gè)實(shí)例存在可能引起程序邏輯錯(cuò)誤,如號(hào)碼生成器
總結(jié)
以上是生活随笔為你收集整理的Java入门之初识设计模式---单列模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复制介绍、复制的实用价值
- 下一篇: 【Java学习】多线程2