2014-11-24 5 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

Статические методы фабрики позволяют нам инициализировать и настроить новый фрагмент без необходимости вызова его конструктора и дополнительных методов настройки. Предоставление статических заводских методов для ваших фрагментов является хорошей практикой, поскольку оно инкапсулирует и абстрагирует шаги, необходимые для установки объекта с клиента.

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

+0

Я предполагаю, что это имеет смысл. Если вы хотите создать фрагмент с теми же параметрами, а не по умолчанию, но не можете использовать параметризованные конструкторы из-за того, как работают фрагменты (Связки сохраняют данные по изменению конфигурации). – EpicPandaForce

0

Фрагмент должен иметь конструктор без аргументов. Это потому, что Android вызовет конструктор по умолчанию, чтобы воссоздать фрагмент. Если вы не передаете аргументы, вам не нужен ни конструктор, ни статический заводский метод (AKA, виртуальный конструктор).

Смежные вопросы