powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
7 сообщений из 7, страница 1 из 1
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
    #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
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
    #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
Как запретить изменения в объектах в обход класса, который управляет объектами? (+)
    #33834136
Neuling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо,
я такого не знал.

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

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

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

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

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

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


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