powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП
9 сообщений из 9, страница 1 из 1
ООП
    #32807495
Anatoly K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, чего-то я совсем заблудиося.

Ситуация:
Есть набор позожих классов, с одним и тем же набором методов (начинка разная). Причем, объект каждого класса должен существовать в одном экземпляре. Тогда я бы мог объявить эти методы статическими, чтобы не создавать каждый раз объекты этого класса (Имякласса.метод()).

Типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public   class  Bs {
   protected   static  ArrayList list1 =  new  ArrayList();
  . . . 
  
}

 public   class  A1  extends  Bs{
    protected  A1 inst =  new  A1();
    public   static   int  method1(){
       return  list1.size();
   }
}
 public   class  A2  extends  BS{
    protected  A2 inst =  new  A2();
    public   static   int  method1(){
       return  list1.size();
   }
}
и т.д.

Здесть массив list1 каждый раз заполняется разными объектами, которые не имеют между собой ничего общего.
Проблема: как я понял, из статических методов можно обрашаться только к статическим переменным. Поэтому list1 - static. Но у меня создается такое впечатление, что из-за этого list1 присутствует только в одном экземпляре для всех объектов классов, создаваемых из потомков Bs. Т.е. и для A1 и для A2 используется идин и тот же list1.

Я прав или ошибаюсь?
...
Рейтинг: 0 / 0
ООП
    #32807507
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конешно правы, он же static-поэтому экземпляр один во всех объектах(производных тоже ониж тоже типа Bs)
...
Рейтинг: 0 / 0
ООП
    #32807541
Anatoly K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! А как это можно победить?

Т.е. есть наборы объектов, с которыми я делаю одинаковые манипуляции. Каждый набор должен быть в одном экземпляре. Перетащить список в подклассы - не очень как, то. Я бы мог в базовом классе например некоторые методы, типа получения размера списка реализовать.
Или сделать класс Bs, реализующий общие методы на списком и содержащий собственно сам список (не статический) и поместить его статическим в А1,А2,...?
...
Рейтинг: 0 / 0
ООП
    #32807713
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бррр... нечего не понял, можно доходчивей объяснить суть задачи, а то статический, не статический, в одном экземпляре - жуть
...
Рейтинг: 0 / 0
ООП
    #32807804
Anatoly K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробую. Грубо говоря - есть список пользователей. список сессий, в которых каждый пользователь, сессия представлен экземпляром соотыетствующего класса. Списки небольшие - 15-20 объектов в каждом.

Использую я их одинаковым образом, т.е. интерфейс у них(списков) вроде бы одинаковый. Просто я хочу, чтобы у меня в программе присутствовало по одному экземпляру каждого списка. С точки зрения наследования казалось просто создаешь базовый класс, который может содержать реализацию одних и тех же методов в списках (например взятие размера). С другой стороны, хочется, чтобы методы в списках быди статическими (чтобы обращаться к методам в виде класс_списка.метод()), а не instanc = класс_списка.getInstance(); instanc.метод(). Тут и вылезает противоречие.

Хотел создать базовый класс, в котором содержалась бы реализация общих для всех списков методов+список абстрактных методов, у которых разная реализация. Эти методы я хотел реализовать в подклассах и сделать их статическими. А не получается. Все равно придетсая переписывать этот кусок.
...
Рейтинг: 0 / 0
ООП
    #32807844
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Kя хочу, чтобы у меня в программе присутствовало по одному экземпляру каждого списка singleton pattern поможет вам(правда есть подводные камни )
Anatoly Kпо одному экземпляру каждого списка
противоречит
Anatoly KС другой стороны, хочется, чтобы методы в списках быди статическими (чтобы обращаться к методам в виде класс_списка.метод()), а не instanc = класс_списка.getInstance(); instanc.метод().

Anatoly KХотел создать базовый класс, в котором содержалась бы реализация общих для всех списков методов+список абстрактных методов, у которых разная реализация. Эти методы я хотел реализовать в подклассах и сделать их статическими. А не получается. Все равно придетсая переписывать этот кусок.
и в чём проблема создайте базовый класс, в потомках реализуйте абстракции
сами же говорите:
Anatoly KИспользую я их одинаковым образом, т.е. интерфейс у них(списков) вроде бы одинаковый
...
Рейтинг: 0 / 0
ООП
    #32807866
Ustazz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы предложил использовать обычную иерархию классов коллекции вместе с паттерном Singleton - для каждого класса коллекции свой едиственный статический экземляр.
Ну и получилось бы примерно так:
класс_списка.метод();
а внутри него:
класс_списка.getInstance().методЭкземпляра()

Впрочем, доступ к статическому экземпляру, можно вынести в какой-нибудь фасад, например, так:

Код: plaintext
1.
SecurityFacade.getUsers();
SecurityFacade.getRoles();

При этом внешний по отношению к фасаду код не будет знать откуда берутся коллекции.
...
Рейтинг: 0 / 0
ООП
    #32807867
Anatoly K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я ж и пытаюсь. По поводу подводных камней я знаю. Сталкивался с таким в С++.

Спасибо.
Сейчас немного подумаю и начну сначала.
...
Рейтинг: 0 / 0
ООП
    #32807874
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удачи вам.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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