設計模式之單例模式

2021-09-07 18:27:43 字數 2651 閱讀 2526

打算把設計模式整一整,不然還是想不到什麼時候該用哪種設計模式,在需要的時候想不到,在想到的時候不知道用在哪,所以還是經驗缺少和概念模糊的緣故。

單例模式:乙個類有且僅有乙個例項,並且自行例項化向整個系統提供。

單例模式根據實現方式不同分為:懶漢方式、餓漢方式、靜態內部類、列舉方式。

1、懶漢方式:全域性的單例例項在第一次被使用時構建。

① 最常見的懶漢方式(執行緒不安全的):

package com.interview.design.singleton.idler.common;

/** * @author: gtd

* @description:

* @date: create in 16:18 2019/1/11

*/public class singletonidler

public static singletonidler getsingletonidler()

return singletonidler;

}}

②、執行緒安全的懶漢方式(雙重鎖):

package com.interview.design.singleton.idler.safe;

import com.interview.design.singleton.idler.common.singletonidler;

/** * @author: gtd

* @description:

* @date: create in 16:23 2019/1/11

*/public class singletonidlersafe

public static singletonidlersafe getsingletonidlersafe()}}

return singletonidlersafe;

}}

2、餓漢方式:全域性的單例例項在類裝載時構建,即在載入類的時候就建立類的例項。

餓漢方式(執行緒安全的):

package com.interview.design.singleton.hungry.common;

/** * @author: gtd

* @description:

* @date: create in 16:53 2019/1/11

*/public class singletonhungry

public static singletonhungry getsingletonhungry()

}

3、靜態內部類方式實現:

package com.interview.design.singleton.staticinner;

/** * @author: gtd

* @description:

* @date: create in 17:26 2019/1/11

*/public class singletonstaticinner

private static class staticinner

public static singletonstaticinner getsingletonstaticinner()

}

4、列舉方式實現:

package com.interview.design.singleton.enums;

/** * @author: gtd

* @description:

* @date: create in 17:33 2019/1/11

*/public enum singletonenums

}

測試類:

package com.interview.design.singleton;

import com.interview.design.singleton.enums.singletonenums;

import com.interview.design.singleton.hungry.singletonhungry;

import com.interview.design.singleton.idler.common.singletonidler;

import com.interview.design.singleton.idler.safe.singletonidlersafe;

import com.interview.design.singleton.staticinner.singletonstaticinner;

/** * @author: gtd

* @description:

* @date: create in 17:33 2019/1/11

*/public class test

}

下面開始分析一下上面四種實現方式:

1、從執行緒安全方面考慮,懶漢雙重鎖方式,餓漢方式,靜態內部類方式和列舉方式都是執行緒安全的。

2、從載入時間上考慮,懶漢方式和靜態內部類方式在被呼叫的時候才去初始化,而餓漢方式和列舉方式在類被載入時就去初始化。這裡可以和資源耗費以及應用啟動時長關聯起來

如果不考慮啟動時長的話建議使用餓漢方式。如果考慮延遲載入的話靜態內部類和懶漢雙重鎖都是一種不錯的實現方式,列舉用的比較少。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...