Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
#1

Singleton или класс с полями static? - Программирование Android

06.06.2016, 13:43. Просмотров 492. Ответов 13
Метки нет (Все метки)

Собственно вопрос в названии темы.

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

Можно создать класс и все эти переменные сделать статическими. Но тогда в главном классе нужно будет создать метод init(), чтобы их проинициализировать.

А можно применить паттерн одиночка и проинициализировать в конструкторе синглтона.

Как лучше поступить.

Первый способ отлично работае, а второй, вроде как смотрится получше...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2016, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Singleton или класс с полями static? (Программирование Android):

Можно ли не использовать singleton - Программирование Android
Бывают ли случаи когда без singleton невозможно реализовать идею в коде? Или по другому, любой ли код с singleton можно переделать чтобы...

Singleton vs static class - C++
Зачем этот синглтон, если его можно представить как класс с статическими полями и методами. Какой случай я упускаю?

Определите новый класс Student с двумя закрытыми полями полями: name и sumb - C#
Я очередной студент, которые вам, полагаю, очень надоели, но все же я очень надеюсь на вашу помощь. Задание 4. Массивы Объектов. ...

Определить класс Student с двумя закрытыми полями полями: name и sumb - C#
Всем доброго дня. Помогите пожалуйста довести код до ума. Я что то никак не разберусь. Вот задание: 1. Создайте новое консольное...

Как создать класс Singleton? - Java SE
как создать класс Singleton с названием DataStore? как вообще создаются классы Singleton?

Класс для работы с базой данных на singleton - PHP ООП
использую класс для глобального доступа к единственному экземпляру объекта PDO: class DB { private static $_instance = null; ...

13
Любопытный
143 / 157 / 30
Регистрация: 19.10.2012
Сообщений: 497
06.06.2016, 15:05 #2
Цитата Сообщение от BirviZ Посмотреть сообщение
Но тогда в главном классе нужно будет создать метод init(), чтобы их проинициализировать.
Статические блоки инициализации.
Значения полей могут изменяться в процессе работы приложения?
0
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
06.06.2016, 15:08  [ТС] #3
Да, будут.
Значения при инициализации - это те, которые по дефолту, а в процессе работы будут меняться.
0
Любопытный
143 / 157 / 30
Регистрация: 19.10.2012
Сообщений: 497
06.06.2016, 15:18 #4
Не вижу смысла усложнять код реализацией синглтона, если непосредственной потребности в нем нет.
Вы можете все реализовать на основе статического класса, дефолтные параметры инициализировать в статическом
блоке инициализации, но следите за потокобезопасностью при конкурентном изменении состояния.
1
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
06.06.2016, 15:22  [ТС] #5
Понятно.
Значит создам статический класс.
Пробовал реализовать синглтон, столкнулся с проблемй, что этот класс нужно еще наследовать от AppCompatActivity, так как нужем метод getViewById()....
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
07.06.2016, 09:01 #6
BirviZ, тут по ситуации. Можно и singleton, желательно, потокобезопасный. Инициализировать класс в Application-классе. Внутри singleton'а сделать метод getInstance. Также сделать конструктор с инициализацией переменных.
Про getViewById не понял. Эти параметры можно передавать в конструктор. Зачем это должно быть как-то связано с активностью?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
07.06.2016, 09:42 #7
Цитата Сообщение от BirviZ Посмотреть сообщение
некоторое количство глобальных переменных носящих более конфигурационный характер
можно сделать через SharedPerferences, статические поля (а не статический класс), через наследника Application, БД, content provider и т.д.

а вообще задача описана не полностью и без конкретики
0
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
08.06.2016, 11:50  [ТС] #8
Собственно класс который я хотел реализовать как синглтон
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.birviz.vapecalculator;
 
import android.widget.EditText;
import android.widget.TextView;
 
public class Values {
    /* defalt values */
    static int liquidTotal = 10;
    static int nicotineBase = 36;
    static int nicotineTotal = 6;
    static int pg = 55;
    static int vg = 35;
    static int water = 10;
    static int aroma = 5;
    static int dropsInMilliliter = 20;
 
    /* define fields */
    static EditText liquidTotalEditText;
    static EditText nicotineBaseEditText;
    static EditText nicotineTotalEditText;
    static EditText pgEditText;
    static EditText vgEditText;
    static EditText waterEditText;
    static EditText aromaEditText;
    static EditText dropsInMilliliterEditText;
 
    static TextView outputDisplay;
}
Нужно что бы эти переменные существовали в одном экземпляре и имели доступ из любого класса приложения. (В данном случае из одного пакета. Мое приложение врядли выйдет за рамки одного пакета))
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
08.06.2016, 14:18 #9
Цитата Сообщение от BirviZ Посмотреть сообщение
Java
1
static EditText liquidTotalEditText; static EditText nicotineBaseEditText; static EditText nicotineTotalEditText; static EditText pgEditText; static EditText vgEditText; static EditText waterEditText; static EditText aromaEditText; static EditText dropsInMilliliterEditText; static TextView outputDisplay;
вот так делать точно не стоит
0
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
08.06.2016, 14:19  [ТС] #10
Почему?
И как лучше?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
08.06.2016, 14:24 #11
Цитата Сообщение от BirviZ Посмотреть сообщение
Почему?
потому
Цитата Сообщение от BirviZ Посмотреть сообщение
И как лучше?
все эти текстовые поля, edittext-ы обычно делаются приватными, никто не делает их public
обычно такое происходит если архитектура приложения не очень
нужно сидеть и думать как сделать так что бы приложению не хотелось брать кучу каких-то переменных из статических полей
0
ZeroHero
3 / 3 / 1
Регистрация: 24.05.2015
Сообщений: 67
10.06.2016, 10:59 #12
Java
1
2
3
4
5
6
7
8
static int liquidTotal = 10;
    static int nicotineBase = 36;
    static int nicotineTotal = 6;
    static int pg = 55;
    static int vg = 35;
    static int water = 10;
    static int aroma = 5;
    static int dropsInMilliliter = 20;
через SharedPreferences. А вьюхи прямо в классе активности.
0
BirviZ
1 / 1 / 0
Регистрация: 11.10.2015
Сообщений: 79
10.06.2016, 12:15  [ТС] #13
SharedPreferences не подойдет. Эти переменные будут менять значения.
Судя по всему оставлю переменные как есть, а вьюхи в класс активности перенесу.
0
ZeroHero
3 / 3 / 1
Регистрация: 24.05.2015
Сообщений: 67
11.06.2016, 02:36 #14
Так ты сделай класс PrefManager, в нем собери все коды твоих переменных. И при любом изменении вызывай метод PrefManager.putString(PrefManager.CODE_SPEED) PrefManager.getString(key) преф менеджер синглтон создавай при ицнициализации приложения. Я просто с девайса сижу. Был бы с компа скинул рабояий код. Если что, завтра могу так и сделать.
0
11.06.2016, 02:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2016, 02:36
Привет! Вот еще темы с ответами:

Collections: singleton/singletonList/singletonMap. Что значит слово singleton? - Java SE
Заметил, что в классе Collections (утилитный класс) имеются методы для оборачивания элемента в set/list/map Все эти методы содержат в...

Из класса "Дата" с полями день, месяц, год создать класс "Время" с дополнительными полями час, минута, секунда - C++
в общем .надо класс дата полями день, месяц год.теперь мне надо создать класс "Время" з дополнительными полями часов,минут,секунд и...

Создать базовый класс Тройка_чисел (Triad) и производный класс Time с полями часы, минуты и секунды - C++
Наследование. Виртуальныефункции.Полиморфизм. 1. Цельзадания: 1) Создание консольного приложения, состоящего и - Базовый класс:...

Создать класс и класс-потомок с полями - C++
Создать класс и класс-потомок с полями, под некоторые из полей классов память выделять динамично. Реализовать в классе и классе - потомке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru