Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как запретить изменения в объектах в обход класса, который управляет объектами? (+) / 7 сообщений из 7, страница 1 из 1
05.07.2006, 18:56
    #33833941
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
У меня есть класс MyObjectsFactory, который управляет (содержит списки, инстанцирует и т.д.) всеми объектами, которые нужны во время работы программы.

Соответственно есть различные методы. Приведу набор аттрибутов и методов для одного из объектов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public   class  MyObjectsFactory {
...
 private   static  Vector goals =  new  Vector();
...
 public   static  Goal getNewGoal() {
...
g =  new  Goal();
goals.add(g);
...
 return  g;
 }
 public   static   void  removeGoal(Goal g) {
...
goals.remove(g)           
} 

Другие классы, в частности различные ГУИ, разумеется используют все эти объекты для презентации и работы. В данный момент вызов одного из подобных классов выглядит примерно так:
Код: plaintext
1.
2.
3.
 public  Container getGoalsMoverView(){               
         return   new  BLGoalsMoverView(MyObjectsFactory.getGoals());     
    }

Вопрос: Как я могу гарантированно обеспечить "безопасность" моих объектов, т.е. я хочу "заставить" все остальные классы обращаться за новым объектом или требовать удаление объекта только через MyObjectsFactory.

Первая мысль была: не передавать вектор как параметр. Т.е. использовать например в вышеприведенном классе getGoalsMoverView непосредтвенно MyObjectsFactory и обращаться всегда к нему. Но по размышлении получается, что это тоже не решение.

Ведь, ничто мне не мешает в одном из классов запрограммировать:
Код: plaintext
1.
2.
Vector myGoals = MyObjectsFactory.getGoals();
myGoals.remove(g);

Таким образом будет удален объект из списка "в обход" класса MyObjectsFactory.

Подскажите пожалуйста, как быть?

Спасибо
...
Рейтинг: 0 / 0
05.07.2006, 19:11
    #33833974
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
NeulingВедь, ничто мне не мешает в одном из классов запрограммировать:
Код: plaintext
1.
2.
Vector myGoals = MyObjectsFactory.getGoals();
myGoals.remove(g);
Таким образом будет удален объект из списка "в обход" класса MyObjectsFactory.
Код: plaintext
1.
2.
3.
List getGoals(){
    return  Collections.unmodifiableList( goals );
}
это помешает :)
...
Рейтинг: 0 / 0
05.07.2006, 21:31
    #33834136
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
Спасибо,
я такого не знал.

А можно как-нибудь непосредственно вектор передать?
...
Рейтинг: 0 / 0
05.07.2006, 21:34
    #33834141
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
Да, еще вопрос по этой же теме.

Какие модификаторы нужно проставить на конструкторах объектов, чтобы только MyObjectsFactory мог их использовать?

Чисто теоретически, вроде нужно MyObjectsFactory объявить как friend для всех классов, конструкторы которых я как приват должен декларировать. Но в яве вроде нету понятия friend?
...
Рейтинг: 0 / 0
06.07.2006, 11:57
    #33835142
Jozic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
NeulingА можно как-нибудь непосредственно вектор передать?Зачем? вектор имплементит лист, отдавайте наверх интерфейс :)
NeulingКакие модификаторы нужно проставить на конструкторах объектов, чтобы только MyObjectsFactory мог их использовать?

Чисто теоретически, вроде нужно MyObjectsFactory объявить как friend для всех классов, конструкторы которых я как приват должен декларировать. Но в яве вроде нету понятия friend?закройте их в пекедже с фабрикой и зделайте пекедж визибл или иннер классы
...
Рейтинг: 0 / 0
06.07.2006, 11:58
    #33835146
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
NeulingДа, еще вопрос по этой же теме.

Какие модификаторы нужно проставить на конструкторах объектов, чтобы только MyObjectsFactory мог их использовать?

Чисто теоретически, вроде нужно MyObjectsFactory объявить как friend для всех классов, конструкторы которых я как приват должен декларировать. Но в яве вроде нету понятия friend?
Нету такого понятия. Но можно декларировать конструкторы классов без указания модификатора доступа (т.н. default), тогда все члены класса, объявленные так, будут видны только внутри пакета, в котором находится класс. Соответственно, вместо объявления friend объединяешь все требуемые классы в один пакет с MyObjectFactory. Вне этого пакета конструкторы видны не будут.
...
Рейтинг: 0 / 0
07.07.2006, 14:19
    #33838461
Neuling
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
Спасибо, да придеться в один пакет все запихивать. Но не хотелось.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как запретить изменения в объектах в обход класса, который управляет объектами? (+) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]