在 JavaFX 中,有一些類,例如 javafx.scene.text.Font 和 javafx.scene.paint.Color,它們具有類似于建構式的靜態方法。在Font類中,可以通過陳述句創建一個新的Font物件new Font(name, size),但是相當于呼叫了靜態方法Font.font(name, size),其中Font.font方法回傳一個新Font物件的參考。JavaFX 從創建這些“靜態”建構式中獲得了哪些客觀好處?它們似乎是多余的。為什么不直接宣告更多多載的建構式來實作相同的目標呢?
uj5u.com熱心網友回復:
一般來說,與使用建構式相比,使用靜態工廠方法有幾個優點和缺點。一個很好的參考是 Joshua Bloch 的“Effective Java”(我強烈建議任何 Java 程式員都應該閱讀);在第二版和第三版中是第 1 條。
對于您提到的特定課程:
Color
由于工廠方法具有名稱,因此使用工廠方法允許具有相同簽名的多個方法。例如
public static Color color(double red, double green, double blue);
public static Color hsb(double hue, double saturation, double brightness);
這些不能被兩個不同的建構式替換,因為它們會模棱兩可。
此外,可以說工廠方法提供了更具描述性的名稱。例如,這兩種方法
public static Color valueOf(String value);
public static Color web(String colorString);
具有完全相同的功能,但從設計的角度來看,兩者都很有價值。該valueOf()方法允許與 進行互動FXMLLoader,而該web(...)方法的命名更為恰當(它采用與 HTML 規范中使用的格式相同的字串)。
Font
這個類的基本原理不太清楚,要知道確切的原因需要了解原始 API 設計者的想法。但是請注意,靜態工廠方法的API 規范與建構式不同:
public static Font font(String family, double size)
根據字體系列名稱和大小搜索合適的字體。此方法不保證回傳特定字體,但會盡力找到符合指定要求的字體。family 的 null 或空值允許實作選擇任何合適的字體。
public Font(String name, double size)
使用指定的全臉名稱和大小構造字體
據我所知,當前的實作實際上是相同的,但 API 規范允許在未來的版本中進行更改。可能還有其他好處,例如靜態工廠方法可以快取字體并回傳相同的實體,如果這被確定為性能增強。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516176.html
標籤:爪哇哎呀javafx
上一篇:字串陣列中的元音數
