国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

設(shè)計(jì)模式系列之一:?jiǎn)卫J?/h1>
2019-11-08 02:57:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

要成為一個(gè)合格的程序猿,程序設(shè)計(jì)的思維那是必不可少的。今天來(lái)介紹一下java設(shè)計(jì)模式中最簡(jiǎn)單,也是最常用的設(shè)計(jì)模式,單例模式。

在java中,每個(gè)自定義類(lèi)都可以有無(wú)數(shù)個(gè)對(duì)象,而采用單例能極大的利用現(xiàn)有資源從而減少系統(tǒng)資源的浪費(fèi)。

單例模式的應(yīng)用場(chǎng)景非常廣泛,

    如:數(shù)據(jù)庫(kù)連接池的設(shè)計(jì)就是采用單例,

    servlet編程中每個(gè)servlet也是單例,

   application也是單例的典型應(yīng)用,

   在SPRing中每個(gè)bean默認(rèn)也是單例,

   springmvc中 控制器對(duì)象也是單例等等。

單例模式有五種實(shí)現(xiàn)方式,最常用的有兩種,餓漢模式和懶漢模式,其它有雙重檢測(cè)鎖模式,靜態(tài)內(nèi)部類(lèi)模式以及枚舉類(lèi)模式實(shí)現(xiàn)

餓漢模式:線程安全,調(diào)用效率高,不能延遲加載

package com.panda.singleton;/** * 餓漢模式 * 線程安全,調(diào)用效率高,不能延遲加載 * @author Administrator */public class EhanSingleton {	private EhanSingleton(){};	private static final EhanSingleton instance = new EhanSingleton();	public static EhanSingleton getInstance(){		return instance;	}}懶漢模式:

package com.panda.singleton;/** * 懶漢模式 * 線程安全,調(diào)用效率低,延遲加載 * 使用同步方法防止并發(fā)時(shí)產(chǎn)生多次示例 * @author Administrator */public class LhanSingleton {	private LhanSingleton(){};	private static LhanSingleton instance;	public static synchronized LhanSingleton getInstance(){		if(instance == null){			instance = new LhanSingleton();		}		return instance;	}} 雙重檢測(cè)鎖模式:

package com.panda.singleton;/** * 雙重檢測(cè)鎖模式 * 線程安全,調(diào)用效率高,能延遲加載 * 由于JVM底層調(diào)用模型原因可能會(huì)出錯(cuò),不建議使用 * @author Administrator */public class SingletonDemo1 {	private SingletonDemo1(){};	private static SingletonDemo1 instance;	public static SingletonDemo1 getInstance(){		if(instance == null){			SingletonDemo1 sd;			synchronized(SingletonDemo1.class){				sd = instance;				if(sd == null){					synchronized(SingletonDemo1.class){						if(sd == null){							sd = new SingletonDemo1();						}					}					instance = sd;				}			}		}		return instance;	}}靜態(tài)內(nèi)部類(lèi)模式:

package com.panda.singleton;/** * 靜態(tài)內(nèi)部類(lèi)模式 * 線程安全,調(diào)用效率高,能延遲加載 * @author Administrator */public class SingletonDemo2 {	private SingletonDemo2(){}	private static class Singleton{		private static final SingletonDemo2 instance = new SingletonDemo2();	}	public static SingletonDemo2  getInstance(){		return Singleton.instance;	}}枚舉類(lèi)模式:

package com.panda.singleton;/** * 餓漢模式 * 線程安全,調(diào)用效率高,不能延遲加載 * @author Administrator */public enum SingletonDemo3 {	instance;	//可以寫(xiě)自定義方法實(shí)現(xiàn)各自功能} 單例模式的實(shí)現(xiàn)方法就有這五種,如何選擇應(yīng)根據(jù)現(xiàn)實(shí)情況需要而定,比如當(dāng)類(lèi)的占用資源小且不需要延遲加載時(shí)應(yīng)該選用枚舉類(lèi)模式,而當(dāng)類(lèi)的占用資源大需要延遲加載時(shí)應(yīng)該選用靜態(tài)內(nèi)部類(lèi)模式實(shí)現(xiàn)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

主站蜘蛛池模板: 拜泉县| 保山市| 泽库县| 永仁县| 宁德市| 万山特区| 定南县| 永清县| 开原市| 龙州县| 剑河县| 新竹市| 甘孜县| 闽侯县| 尖扎县| 安阳市| 高碑店市| 牟定县| 介休市| 衡南县| 大厂| 瑞金市| 乳山市| 南宁市| 新竹市| 迭部县| 中西区| 陕西省| 纳雍县| 阿勒泰市| 罗甸县| 竹山县| 呼和浩特市| 湘乡市| 翁牛特旗| 祁连县| 汉阴县| 中卫市| 新建县| 颍上县| 荥阳市|