激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java單例模式實現靜態內部類方法示例

Java單例模式實現靜態內部類方法示例

2021-01-10 11:45ZzzCrazyPig Java教程

這篇文章主要介紹了Java單例模式實現靜態內部類方法示例,涉及構造函數私有化等相關內容,需要的朋友可以了解下。

Singleton是眾多設計模式中最容易理解的一種,也是眾多設計模式中較為重要的一種設計模式。接下來我們看看具體介紹。

Singleton模式實現的重點在于將構造函數私有化(private),并通過提供靜態公有函數(public synchronized static xxx getInstance)來獲取定義在類中的靜態私有成員(private static xxx instance),通過一個簡單的判斷靜態實例是否為空來控制這個類只能夠new一次,即控制了一個類只能有單個實例,一般的實現如下代碼所示:

java" id="highlighter_134184">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.study.dp.singleton;
/**
 * 傳統方式實現單例模式
 * @author CrazyPig
 *
 */
public class TraditionalSingletion {
  // 單實例
  private static TraditionalSingletion instance;
   
  // 不讓new
  private TraditionalSingletion() {
    System.out.println("private TraditionalSingletion()");
  }   
  public synchronized static TraditionalSingletion getInstance() {
    System.out.println("TraditionalSingletion getInstance()");
    if(instance == null) {
      System.out.println("instance = new TraditionalSingletion()");
      instance = new TraditionalSingletion();
    }
    return instance;
  }   
  public static void main(String[] args) {
    TraditionalSingletion instance = TraditionalSingletion.getInstance();
    System.out.println("========================================");
    TraditionalSingletion instance01 = TraditionalSingletion.getInstance();
    System.out.println("========================================");
    TraditionalSingletion instance02 = TraditionalSingletion.getInstance();
  }
}

今天偶然在一篇文章中看到另外一種巧妙的做法,通過將這個單實例的引用變量定義在靜態內部類中,來實現單例,這樣可以做到不用if條件進行判斷,并且是多線程安全的(由jvm保證)。這個特殊的做法如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.study.dp.singleton; 
/**
 * 靜態內部類實現單例模式
 * @author CrazyPig
 *
 */
public class SpecialSingleton {   
  // 靜態內部類
  private static class NestClass {
    private static SpecialSingleton instance;
    static {
      System.out.println("instance = new SingletonTest()");
      instance = new SpecialSingleton();
    }
  }   
  // 不能直接new
  private SpecialSingleton() {
    System.out.println("private SingletonTest()");
  }
  public static SpecialSingleton getInstance() {
    System.out.println("SingletonTest getInstance()");
    return NestClass.instance;
  }
  public static void main(String[] args) {
    SpecialSingleton instance = SpecialSingleton.getInstance();
    System.out.println("========================================");
    SpecialSingleton instance01 = SpecialSingleton.getInstance();
    System.out.println("========================================");
    SpecialSingleton instance02 = SpecialSingleton.getInstance();
  }
}

當第一次引用getInstance()方法的時候,訪問靜態內部類中的靜態成員變量,此時該內部類需要調用static代碼塊(因為首次訪問該類)。而后再次訪問getInstance()方法會直接返回instace引用。這種做法相對于傳統做法更加巧妙。

總結

以上就是本文關于Java單例模式實現靜態內部類方法示例的全部內容,希望對大家有所幫助,感興趣的朋友可以參閱本站其他專題。

原文鏈接:http://blog.csdn.net/d6619309/article/details/38655825

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一区二区三区欧美精品 | 国内精品视频饥渴少妇在线播放 | 免费放黄网站在线播放 | 久久久久久久免费视频 | 久久久久se | 美国人成人在线视频 | 国产在线免 | 欧美性受ⅹ╳╳╳黑人a性爽 | 久久精品一区二区三区不卡牛牛 | 牛牛热这里只有精品 | 国产噜噜噜噜噜久久久久久久久 | 91精品国产综合久久久动漫日韩 | 欧美日韩亚洲成人 | 深夜免费观看视频 | 91在线视频福利 | 欧美大片一级毛片 | 国产精品视频yy9299一区 | 视频一区二区三区在线观看 | 国产精品伊人久久 | 欧美日韩免费看 | 成年人在线免费播放视频 | 日本一区二区久久久 | 毛片免费视频播放 | 国产视频导航 | 久久久资源网 | 污污的视频在线观看 | 国产一区二区二 | 亚洲狠狠入| 大学生一级毛片在线视频 | 一级黄色大片在线观看 | 久久99国产综合精品 | 欧美日韩亚洲成人 | 中文日产幕无线码6区免费版 | 羞羞漫画无遮挡观看 | www.99xxxx.com| 亚洲成人在线免费 | 曰韩av在线 | 国产88久久久国产精品免费二区 | 久久草草亚洲蜜桃臀 | 青草伊人网 | 蜜桃视频网站在线观看 |