2013-04-23 37 views
1

我有一個「靜態」類(即一個具有私有構造函數並且只有靜態成員和函數的類)。它包裝Android的'SharedPreferences編輯器,它有一個相當不錯的流利的API。在java中使用「靜態」類的流利的API

我想知道是否有可能創建一個類似的流利的API使用這個靜態類包裝?

問題是,通常在製作流暢的API時,所有函數中都會有一個return this;。 (據我所知)在「靜態」類設計中是不可能的。有沒有解決這個問題的方法?

顯然這可以使用單例模式解決,但我正在尋找其他解決方案,最好是那些需要儘可能少的樣板代碼的解決方案。

回答

2

我不熟悉的喜好API,而是讓你訪問靜態流體API是非常簡單的。

例如,有像Preferences.set().background(green).border(yellow);,你可以做到以下幾點:

public class Preferences { 

     private Preferences(){} 

     public static Preferences set() { 
      return new Preferences();  
     } 

     public Preferences background(Color color) { 
      //set color on real preferences 
      return this; 
     } 

     public Preferences border(Color color) { 
      //set color on real preferences 
      return this; 
     } 

    } 
2

通常您會有一個靜態工廠方法返回一個新對象,然後該對象的非靜態方法自定義對象或返回具有新行爲的對象的副本。後者是可取的,因爲那時你的對象可以是不可變的。

爲了什麼,我認爲是一個很好的例子,看Guava's Ordering class

// yields a natural ordering over some type 
// where the largest object comes first (reverse ordering) 
Ordering.natural().onResultOf(someFunction).reverse();