国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - Java靜態工廠方法的實例詳解

Java靜態工廠方法的實例詳解

2020-12-30 11:41hzy38324 Java教程

這篇文章主要介紹了 Java靜態工廠方法的實例詳解的相關資料,希望通過本文大家能掌握java今天工廠方法,需要的朋友可以參考下

 Java靜態工廠方法的實例詳解

什么是靜態工廠方法

對于類而言,為了讓使用者獲取它自身的一個實例,最常用的方法就是提供一個公有的構造器。
當然,這里要介紹的是另一種方法——靜態工廠方法,一個返回類的實例的靜態方法。
舉個例子,Boolean的一個將基本類型boolean轉為封裝類的方法,valueOf:

?
1
2
3
public static Boolean valueOf(boolean b) {
  return (b ? TRUE : FALSE);
}

為什么要使用靜態工廠方法

那么,我們為什么要使用靜態工廠方法,而不是使用構造器呢?

因為靜態工廠方法,具有以下三個特點——具名、環保、多子,下面一個個來講。

> 具名  靜態工廠方法有名稱

對于構造器來說,根據入參的不同可以有多個構造器,但是這些構造器的名稱都是一樣的,使用者在調用時就會一頭霧水,到底應該調用哪一個呢。

而使用了靜態工廠方法之后,你可以根據方法的功能給方法起不同的名字,只有名字起得好,使用者看到方法名就知道是什么意思,知道這時候應該調用哪一個方法,大大提高了代碼的可讀性。

> 環保  不必每次調用的時候都創建一個新對象

使用構造器,每次都會產生一個新的對象。

而靜態工廠方法,可以重復地返回預先創建好的對象。

上面Boolean就是一個非常好的例子,TRUE和FALSE兩個變量都是預先創建好的,而且都是不可變的final對象,誰需要用到了,就給它返回過去,也不用擔心被修改了。

下面就是TRUE和FALSE兩個變量的初始化代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public final class Boolean implements java.io.Serializable,
                   Comparable<Boolean>
{
  /**
   * The {@code Boolean} object corresponding to the primitive
   * value {@code true}.
   */
  public static final Boolean TRUE = new Boolean(true);
 
  /**
   * The {@code Boolean} object corresponding to the primitive
   * value {@code false}.
   */
  public static final Boolean FALSE = new Boolean(false);
 
  ...  
}

> 多子  可以返回原返回類型的任何子類型的對象

使用構造器,你只能返回一種類型的對象;而使用靜態工廠方法,你可以根據需要,返回原返回類型的任何子類型的對象。
以EnumSet的noneof方法為例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * Creates an empty enum set with the specified element type.
 *
 * @param elementType the class object of the element type for this enum
 *   set
 * @throws NullPointerException if <tt>elementType</tt> is null
 */
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
  Enum[] universe = getUniverse(elementType);
  if (universe == null)
    throw new ClassCastException(elementType + " not an enum");
 
  if (universe.length <= 64)
    return new RegularEnumSet<>(elementType, universe);
  else
    return new JumboEnumSet<>(elementType, universe);
}

這個方法,出于性能的考慮,具體返回什么類型,由枚舉類型的數量決定,超過64,則返回JumboEnumSet,否則返回RegularEnumSet,而這兩種類對于使用者來說是不可見的,使用者只需要知道他是EnumSet就好。

也正是因為靜態工廠方法有著比構造器更大的優勢,我們在創建類時,切忌第一反應就是提供公有構造器,要優先考慮靜態工廠方法。

常見的靜態工廠方法名

這里附上靜態工廠方法的一些約定俗成的名稱:

valueOf/Of——類型轉換,返回的實例和入參具有相同的值,比如Boolean.valueOf()、EnumSet.valueOf()
getInstance——返回一個預先創建好的實例
newInstance——返回一個新的實例

靜態工廠方法難道不就是工廠模式嗎?

講到這里,可能會有很多人覺得這不就是工廠模式嗎?答:并不完全相同。
本文講的靜態工廠方法,和工廠模式一樣,都是用來取代構造器的方法,都具有上面說的三個優勢:具名、環保、多子。

但是,兩者的實現方式和使用場景并不相同。

首先,直觀上看,在代碼結構上,我們說的工廠模式,通常需要一個xxxFactory類,在里面定義工廠方法;而本文講的靜態工廠

方法,則只需要一個類,類本身就提供了生產對象的工廠方法。

其次,我們想一下,假如一個類,在設計的時候,就提供了靜態工廠方法,那么還需要使用工廠模式嗎?

是的,不需要。

也就是說,只有當一個類沒有提供靜態工廠方法的時候,我們才需要使用工廠模式。

腦洞一下,假如蘋果公司有強大的零部件工廠,那它還需要富士康嗎?

總結

靜態工廠方法具有三大優勢——具名、環保、多子。

如果一個類提供了靜態工廠方法,那么也就不需要考慮對這個類進行工廠模式了。

我們在創建類時,切忌第一反應就是提供公有構造器,要優先考慮靜態工廠方法。

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/hzy38324/article/details/72630415

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产欧美日韩综合精品一区二区 | 久久久久久久99 | 农村末发育av片四区五区 | 中文一区 | 欧美国产在线视频 | 欧美国产日韩一区 | 欧美日韩在线一区二区三区 | 成人午夜啪啪好大 | 精品国产一区二区三区日日嗨 | 亚洲欧美日韩电影 | 国产精品成人一区二区三区 | 一级做a爰片性色毛片精油 欧美中文字幕在线观看 | 免费观看黄视频网站 | 亚洲精彩视频在线 | 国产第一区二区三区 | 亚洲视频精品在线观看 | 国产精品资源在线观看 | 国产成人精品久久二区二区91 | 国产精品久久久久久久一区探花 | 国产一区二区三区免费观看 | 一级a性色生活片毛片 | 免费黄色网止 | 欧美日韩综合 | 久久精品国产亚洲一区二区三区 | 在线观看亚洲专区 | 自拍在线| 国产精品成人观看视频国产奇米 | 成人免费在线播放 | 毛片黄片免费观看 | 午夜视频网 | 成人精品免费视频 | 97国产超碰 | 久久久久久国产精品高清 | 亚洲一区二区三区视频 | 久久久精品一区二区 | 亚洲国产成人在线 | 日本中文在线视频 | 国产精品69毛片高清亚洲 | 精品91 | 久久亚洲天堂 | 高清一区二区三区日本久 |