一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 污到湿的爽文免费阅读 | 亚洲国产黄色 | 99视频有精品视频免费观看 | 67194久久 | 肥胖女性大bbbbbb视频女厕 | 四虎影院久久久 | 欧美成人福利视频 | 趴好撅高打屁股sp调教h | 久久久无码精品亚洲A片软件 | 国产成+人+综合+亚洲欧美丁香花 | 欧美又黄又激烈真实床戏 | 国产午夜免费不卡精品理论片 | 天天操天天干天天做 | 成人在线免费观看 | 嗯啊好大好爽 | 校园纯肉H教室第一次 | 99精品视频在线观看re | 久久噜国产精品拍拍拍拍 | 国产精品国色综合久久 | 美女撒尿部位无遮挡 | 国产成人精品日本亚洲网站 | 精品亚洲欧美中文字幕在线看 | 亚洲 日韩 在线 国产 视频 | 手机国产乱子伦精品视频 | 免费看国产一级片 | 99爱在线精品视频免费观看9 | 日韩免费毛片视频杨思敏 | 91人成尤物在线 | jizz 日本亚洲| 性色欲情网站IWWW九文堂 | 逼毛片 | 亚洲qvod图片区电影 | 日韩中文字幕视频在线观看 | 亚洲成色 | 手机看片一区二区 | 美女撒尿部位无遮挡 | 俄罗斯处女 | 婷婷草| 精品性久久 | sese在线观看| 秋霞午夜伦午夜高清福利片 |