Как сохранить коллекцию файлов во всем приложении?

#java #file #singleton

#java #файл #синглтон

Вопрос:

В моем мобильном приложении мне нужно хранить коллекцию файловых объектов (изображений, документов), к которым можно получить доступ во всем приложении, и пользователи могут выполнять различные операции над коллекцией:

  • просмотр всех / отдельных файлов
  • загрузите подмножества коллекции на сервер
  • общий доступ к отдельным файлам

Коллекция инициализируется только один раз.

Мне было интересно, хорошая ли идея использовать шаблон singleton в качестве объекта, который содержит коллекцию, чтобы мне не приходилось инициализировать коллекцию каждый раз, когда пользователь открывает определенный экран?

Комментарии:

1. Это определенно хорошая идея. Таким образом, вы также избегаете передачи ссылок через классы пользовательского интерфейса varius.

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

Ответ №1:

Безусловно, это цель шаблона singleton.

Из Википедии шаблон Singleton является

полезно, когда для координации действий в системе требуется ровно один объект.

Пример:

 public class SingletonCollection {

    private Collection<File> fileCollection;
    private static SingletonCollection instance;

    private SingletonCollection() {
        fileCollection = new ArrayList<File>();
    }

    public static SingletonCollection getInstance() {
        if (instance == null) {
            instance = new SingletonCollection();
        }

        reutrn instance;
    }

    public void addFile(File f) {
        fileCollection.add(f);
    }

    public Collection<File> getFiles() {
        return fileCollection;
    }
}
  

Комментарии:

1. Спасибо за подсказку, я собираюсь реализовать ее как синглтон.

Ответ №2:

Для Java >=1.5

 public enum FileCollector
{
    INSTANCE;
    private FileCollector()
    {
        List _temp = new ArrayList();
        File f = new File("properties");
        _temp.add(f);
         fileContainer = Collections.unmodifiableList(_temp);
    }

   private final Collection<File> fileContainer;

   public Collection<File> getFiles() {
        return fileContainer;
    }

}
  

Ответ №3:

Если коллекция инициализируется только один раз, тогда используйте singleton. Без сомнения.

Ответ №4:

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