最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JAVASE單例設計模式

 更新時間:2015年11月30日 08:58:18   投稿:hebedich  
整理筆記的時候發(fā)現以前寫的單利設計模式的文章,貼出來給大家分享下!有需要的小伙伴可以來參考下

簡單的說設計模式,其實就是對問題行之有效的解決方式。其實它是一種思想。

1.單例設計模式。

      解決的問題:就是可以保證一個類在內存中的對象唯一性。(單個實例)

      使用單例設計模式需求:必須對于多個程序使用同一個配置信息對象時,就需要保證該對象的唯一性。

      如何保證對象唯一性?                                                      解決步驟:

      1.不允許其他程序用new創(chuàng)建該對象。                                            1.私有化該類構造函數。

      2.在該類創(chuàng)建一個本類實例。                                                         2.通過new 在該類中創(chuàng)建一個本類對象。

      3.對外提供一個方法讓其他程序可以獲取該對象。                            3.定義一個公有的方法,將創(chuàng)建的對象返回。

//餓漢式(開發(fā)時常用)
class Single//類一加載,對象就已經存在了。
{
  private static Single s = new Single();
 
  private Single(){}
 
  public static Single getInstance()
  {
    return s;
  }
}
 

 

//懶漢式(面試時常問,在多線程并發(fā)訪問時候有可能導致不能保證不了對象的唯一性,存在安全隱患?。?
class Single2//類加載進來,沒有對象,只有調用了getInstance方法時,才會創(chuàng)建對象。
      //延遲加載形式。 
{
  private static Single2 s = null;
 
  private Single2(){}
 
  public static Single2 getInstance()
  {
    if(s==null)
      s = new Single2();
    return s;
  }
}
 
//調用類
class SingleDemo
{
  public static void main(String[] args) 
  {
    Single s1 = Single.getInstance();
    Single s2 = Single.getInstance();
 
    System.out.println(s1==s2);
     
//   Single ss = Single.s; //此處不采用這個是因為不可控,采用 Single.getInstance();可以傳參數進行相應調用。
 
  }
}

餓漢式單例類在自己被加載時就將自己實例化。即便加載器是靜態(tài)的,在餓漢式單例類被加載時仍會將自己實例化。單從資源利用效率角度來講,這個比懶漢式單例類稍差些。從速度和反應時間角度來講,則比懶漢式單例類稍好些。

3.登記式:

代碼:

package pattern.singleton;import java.util.HashMap;import java.util.Map;
 //登記式單例類.
 //類似Spring里面的方法,將類名注冊,下次從里面直接獲取。
public class Singleton3 {
 private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
 static{
 Singleton3 single = new Singleton3();
 map.put(single.getClass().getName(), single);
 }
 //保護的默認構造子
protected Singleton3(){}
 //靜態(tài)工廠方法,返還此類惟一的實例
public static Singleton3 getInstance(String name) {
 if(name == null) {
 name = Singleton3.class.getName();
 System.out.println("name == null"+"--->name="+name);
 }
 if(map.get(name) == null) {
 try {
 map.put(name, (Singleton3) Class.forName(name).newInstance());
 } catch (InstantiationException e) {
 e.printStackTrace();
 } catch (IllegalAccessException e) {
 e.printStackTrace();
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 }
 }
 return map.get(name);
 }
 //一個示意性的商業(yè)方法
public String about() {
 return "Hello, I am RegSingleton.";
 }
 public static void main(String[] args) {
 Singleton3 single3 = Singleton3.getInstance(null);
 System.out.println(single3.about());
 }
 }

相關文章

  • SpringBoot中SmartLifecycle的使用解析

    SpringBoot中SmartLifecycle的使用解析

    這篇文章主要介紹了SpringBoot中SmartLifecycle的使用解析,SmartLifecycle是一個擴展了Lifecycle接口,可以跟蹤spring容器ApplicationContext刷新或者關閉的接口,實現該接口的實現類有特定的執(zhí)行順序,需要的朋友可以參考下
    2023-11-11
  • Spring很常用的@Conditional注解的使用場景和源碼解析

    Spring很常用的@Conditional注解的使用場景和源碼解析

    今天要分享的是Spring的注解@Conditional,@Conditional是一個條件注解,它的作用是判斷Bean是否滿足條件,本文詳細介紹了@Conditional注解的使用場景和源碼,需要的朋友可以參考一下
    2023-04-04
  • 詳解Java的四種引用方式及其區(qū)別

    詳解Java的四種引用方式及其區(qū)別

    這篇文章主要介紹了Java的四種引用方式 ,主要主要包括強引用,軟引用,弱引用,虛引用,稍微整理精簡一下做下分享,具有一定的參考價值,需要的朋友可以參考下
    2018-12-12
  • Java如何將二維數組轉化為一維數組

    Java如何將二維數組轉化為一維數組

    這篇文章主要介紹了Java如何將二維數組轉化為一維數組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java中常用的Lambda表達式案例解析

    Java中常用的Lambda表達式案例解析

    這篇文章主要介紹了Java中常用的Lambda表達式案例解析,Lambxda?使用比較多的場景,就是集合類下的?Lambda?流操作,往往幾行代碼可以幫助我們實現復雜代碼,下面和我小編一起進入文章學習該詳細內容吧
    2022-04-04
  • java8 filter方法、Predicate接口的使用方式

    java8 filter方法、Predicate接口的使用方式

    這篇文章主要介紹了java8 filter方法、Predicate接口的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 深入理解Java IO的flush

    深入理解Java IO的flush

    本篇文章是小編總結的關于Java IO的flush的相關知識點內容,有需要的朋友可以跟著學習下。
    2018-06-06
  • 詳解SpringMVC注解版前臺向后臺傳值的兩種方式

    詳解SpringMVC注解版前臺向后臺傳值的兩種方式

    本篇文章主要介紹了詳解SpringMVC注解版前臺向后臺傳值的兩種方式,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • 給你的MyBatis-Plus裝上批量插入的翅膀(推薦)

    給你的MyBatis-Plus裝上批量插入的翅膀(推薦)

    這篇文章主要介紹了給你的MyBatis-Plus裝上批量插入的翅膀,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • MyBatis?Generator使用小結

    MyBatis?Generator使用小結

    本文主要介紹了MyBatis?Generator使用小結,它能夠根據數據庫表,自動生成java實體類、dao層接口及mapper.xml文件,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11

最新評論

修水县| 博白县| 宜君县| 右玉县| 都江堰市| 潞西市| 休宁县| 舞阳县| 若尔盖县| 汤原县| 石景山区| 仙游县| 伊春市| 莆田市| 正蓝旗| 策勒县| 神池县| 遵义县| 浦北县| 措美县| 祁连县| 东阿县| 晋江市| 宁晋县| 额敏县| 南通市| 盐边县| 隆化县| 天祝| 温州市| 黄龙县| 柳林县| 雷山县| 宁德市| 揭东县| 宿州市| 天全县| 阿尔山市| 濮阳县| 隆安县| 习水县|