java单例设计模式
單例模式的概念
單例類(lèi)只有一個(gè)實(shí)例,并且只由自己創(chuàng)建,實(shí)例化后向整個(gè)系統(tǒng)提供自己的實(shí)例。
單例設(shè)計(jì)模式主要分為2種:懶漢式和餓漢式。2者的區(qū)別在于初始化的時(shí)間不同。
像線(xiàn)程池,緩存,日志等都被設(shè)計(jì)成單例模式;spring中所有的bean不設(shè)置作用域的話(huà),默認(rèn)都是單例模式。
這些單例類(lèi)大多都是具有管理資源的用途。
?
餓漢式單例模式的實(shí)現(xiàn)
餓漢式單例模式在定義類(lèi)的時(shí)候被實(shí)例化。
public class Singleton1 {
??? private Singleton1() {}
??? private static final Singleton1 single = new Singleton1();
??? //靜態(tài)工廠(chǎng)方法
??? public static Singleton1 getInstance() {
??????? return single;
??? }
}
1.構(gòu)造方法私有化,防止被外部實(shí)例化(雖然通過(guò)反射還是可以創(chuàng)建);
2.內(nèi)部聲明私有變量并實(shí)例化;
3.為外部提供訪(fǎng)問(wèn)該實(shí)例的靜態(tài)方法。
?
?
懶漢式單例模式的實(shí)現(xiàn)
懶漢式單例模式在調(diào)用方法的時(shí)候才實(shí)例化。
public class Singleton {private Singleton() {}private static Singleton single=null;//靜態(tài)工廠(chǎng)方法 這里加上同步鎖,讓這個(gè)方法不會(huì)同時(shí)被多個(gè)線(xiàn)程訪(fǎng)問(wèn)public static Singleton getInstance() {if (single == null) { single = new Singleton();} return single;} }懶漢式的實(shí)現(xiàn)與之前的基本相同,只是實(shí)例化放在了方法內(nèi)。
好處是消耗系統(tǒng)資源少。
壞處是它并不是同步的,如果在多線(xiàn)程下,可能被創(chuàng)建多個(gè)實(shí)例。因此在上面可以為方法加鎖,保證同步。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xjx199403/p/10764281.html
總結(jié)
以上是生活随笔為你收集整理的java单例设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蓝牙BLE4.0的LL层数据和L2CAP
- 下一篇: 想知道:中山市广东中山天气预报在哪?