Я разрабатываю приложение для Android, где у меня есть класс Singleton, как показано ниже:

public class ClassName {

    private static ClassName mobject;
    public List<Question> mquestionslist;

    public ClassName() {
        mquestionslist=new ArrayList<Question>();
    }

    public static ClassName getInstance() {
        if (mobject == null) {
            mobject = new ClassName();
        }
        return mobject;
    }
    public void LoadQuestions()
    {
       //do somthing

    }
}

Теперь каждый раз, когда я хочу использовать этот объект, я просто вызываю ClassName.getInstance (). Any_method_name () из другого действия или фрагмента и использую его напрямую. Я никогда не создаю локальную ссылку на этот объект класса, например:

ClassName ref=ClassName.getInstance();
ref.any_method_name();

=> Скажите, пожалуйста, сколько времени этот объект выживет, пока сборщик мусора не удалит его из памяти, и это хорошая практика. (не смог получить ответ из другого места)

3
Vikash Yadav 24 Апр 2017 в 06:36

2 ответа

Лучший ответ

Экземпляр, который вы получаете, вызывая метод getInstance, является статическим объектом , определенным в классе «ClassName».

 private static ClassName mobject;

Экземпляр не станет пригодным для сборки мусора, пока класс ClassName не будет загружен.

Если загрузчик классов, используемый для загрузки ClassName, становится сборщиком мусора, класс ClassName будет выгружен, а соответствующий статический объект будет потерян.

2
Amit Phaltankar 24 Апр 2017 в 03:50

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

Прочтите этот документ, чтобы узнать о различных шаблонах дизайна.

Эта конкретная ссылка имеет определение и объяснение каждого шаблона проектирования, пожалуйста, прочитайте это один раз. Ниже я упомяну использование немногих.

< Сильный > Singleton :
Должен использоваться, если вам нужен один и только один экземпляр класса. Теперь, что заставляет вас решить, что вам нужен только один экземпляр?
Случаи, такие как загрузка нескольких файлов, должны обрабатываться в одном потоке, поэтому менеджер загрузок должен быть одноэлементным, случаи, например, обработка базы данных требует реализации ACID, поэтому обработчик базы данных должен быть одноэлементным. То есть, если вы не хотите сериализовать свои операции, вы не должны использовать синглтон.

< Сильный > Фабрика:
Фабричные методы обычно используются во Фрагментах в Android. Причина ?
Предположим, у вас есть просмотрщик, в котором тип контента в просмотрщике отличается от чего-то общего, поэтому вы можете иметь общий метод newInstance в своем суперфрагменте, и здесь вы можете обработать логику, чтобы решить, какой фрагмент передать viewpager, основанный на положении и состоянии, это упростит ваш код, поскольку вы изолируете логику дисплея с помощью логики функций. Фабрика также позволяет вам поддерживать аргументы фрагмента.

< Сильный > Builder :
Когда у вас есть класс, который можно использовать напрямую без каких-либо параметров или путем изменения отдельных параметров. В этом случае у вас не может быть конструктора для каждой комбинации параметров, хотя вы можете использовать сеттеры и геттеры, но рассмотрите случай первоначальной инициализации отдельных переменных. Здесь мы используем Builder. Например Глайд или Пикассо.

< Сильный > Вывод:
Вы должны быть знакомы с целью, как только ваша цель станет кристально чистой, вы сможете подобрать шаблон дизайна соответствующим образом. Если вы придерживаетесь одного типа шаблона проектирования, не зная его шаблона, то в итоге вы усложните свое приложение. И самое главное, если вы следуете правильному шаблону проектирования, ваше приложение автоматически станет эффективным, и вам не нужно будет беспокоиться о памяти и обработке в большинстве случаев.

Надеюсь, это поможет вам решить, какой шаблон выбрать. Дайте мне знать, если хотите узнать больше. И одну вещь, которую я предлагаю, это поставить под сомнение ваше точное требование, чтобы я или кто-то другой мог предложить лучший образец для этой цели.

2
Mohammed Atif 24 Апр 2017 в 04:40
43579403