2014-11-24 49 views
4

使用工廠構建碎片的目的是什麼? Android Studio提供了一些樣板代碼生成功能,並在創建片段時提供了工廠方法。片段和工廠方法

那麼這是什麼目的呢?收益是多少?

回答

3

使用靜態工廠方法不只是片段,我用它來創建意圖,適配器和其他類也是如此。通過這種方法,您只需控制對象創建。

其中一個很好的優點是你只需通過封裝捆綁鍵來增加內聚力。

class FragmentFoo extends Fragment{ 
} 

當你想束從外部

// Activity Foo 
Bundle bundle = new Bundle(); 
bundle.putString("name","Foo"); 
Fragment fragment = new FragmentFoo(); 
fragment.setArgs(bundle); 

發送到這個片段提取這個名字,你需要使用「名」在片段密鑰爲好,如果你把它當作硬編碼,你可能會有一些錯誤,錯別字。所以你可以使用一個常量來確保你不會輸入錯字。但在這種情況下,你需要把它放在可以看到它的地方。有些人創建了另一個班級,以便保留所有非常難看和難以維護的內容,有些將關鍵點放在片段中,並將其公開並在任何地方使用,

通過靜態工廠方法,您可以將所有內容片段並且不需要公開。誰需要使用這個片段就會清楚它的需求,也不需要知道密鑰是什麼。只需發送所需的參數就足夠了。

class FragmentFoo extends Fragment{ 

    private static final String KEY_NAME = "name"; 

    private String name; 

    public static Fragment newInstance(String name){ 
     Bundle bundle = new Bundle(); 
     bundle.putString(KEY_NAME, "name"); 
     Fragment fragment = new FragmentFoo(); 
     fragment.setArgs(bundle); 

     return fragment; 
    } 
} 
3

靜態工廠方法允許我們初始化和設置新的Fragment,而無需調用其構造函數和其他setter方法。爲碎片提供靜態工廠方法是一種很好的做法,因爲它封裝並提取了從客戶端設置對象所需的步驟。

http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html

+0

我想這是有道理的。如果要使用相同的參數而不是默認值創建Fragment,但由於Fragments的工作方式(Bundles通過配置更改保留數據),因此無法使用參數化的構造函數。 – EpicPandaForce 2014-11-24 09:15:24

0

片段必須有一個沒有參數的構造函數。這是因爲Android會調用默認的構造函數來重新創建片段。如果你沒有傳入參數,那麼你不應該需要構造函數或靜態工廠方法(AKA,虛擬構造函數)。