|
|
|
ООП
|
|||
|---|---|---|---|
|
#18+
Коллеги, чего-то я совсем заблудиося. Ситуация: Есть набор позожих классов, с одним и тем же набором методов (начинка разная). Причем, объект каждого класса должен существовать в одном экземпляре. Тогда я бы мог объявить эти методы статическими, чтобы не создавать каждый раз объекты этого класса (Имякласса.метод()). Типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Здесть массив list1 каждый раз заполняется разными объектами, которые не имеют между собой ничего общего. Проблема: как я понял, из статических методов можно обрашаться только к статическим переменным. Поэтому list1 - static. Но у меня создается такое впечатление, что из-за этого list1 присутствует только в одном экземпляре для всех объектов классов, создаваемых из потомков Bs. Т.е. и для A1 и для A2 используется идин и тот же list1. Я прав или ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:04 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
конешно правы, он же static-поэтому экземпляр один во всех объектах(производных тоже ониж тоже типа Bs) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:07 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Спасибо! А как это можно победить? Т.е. есть наборы объектов, с которыми я делаю одинаковые манипуляции. Каждый набор должен быть в одном экземпляре. Перетащить список в подклассы - не очень как, то. Я бы мог в базовом классе например некоторые методы, типа получения размера списка реализовать. Или сделать класс Bs, реализующий общие методы на списком и содержащий собственно сам список (не статический) и поместить его статическим в А1,А2,...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:20 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
бррр... нечего не понял, можно доходчивей объяснить суть задачи, а то статический, не статический, в одном экземпляре - жуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 14:42 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Попробую. Грубо говоря - есть список пользователей. список сессий, в которых каждый пользователь, сессия представлен экземпляром соотыетствующего класса. Списки небольшие - 15-20 объектов в каждом. Использую я их одинаковым образом, т.е. интерфейс у них(списков) вроде бы одинаковый. Просто я хочу, чтобы у меня в программе присутствовало по одному экземпляру каждого списка. С точки зрения наследования казалось просто создаешь базовый класс, который может содержать реализацию одних и тех же методов в списках (например взятие размера). С другой стороны, хочется, чтобы методы в списках быди статическими (чтобы обращаться к методам в виде класс_списка.метод()), а не instanc = класс_списка.getInstance(); instanc.метод(). Тут и вылезает противоречие. Хотел создать базовый класс, в котором содержалась бы реализация общих для всех списков методов+список абстрактных методов, у которых разная реализация. Эти методы я хотел реализовать в подклассах и сделать их статическими. А не получается. Все равно придетсая переписывать этот кусок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:14 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Anatoly Kя хочу, чтобы у меня в программе присутствовало по одному экземпляру каждого списка singleton pattern поможет вам(правда есть подводные камни ) Anatoly Kпо одному экземпляру каждого списка противоречит Anatoly KС другой стороны, хочется, чтобы методы в списках быди статическими (чтобы обращаться к методам в виде класс_списка.метод()), а не instanc = класс_списка.getInstance(); instanc.метод(). Anatoly KХотел создать базовый класс, в котором содержалась бы реализация общих для всех списков методов+список абстрактных методов, у которых разная реализация. Эти методы я хотел реализовать в подклассах и сделать их статическими. А не получается. Все равно придетсая переписывать этот кусок. и в чём проблема создайте базовый класс, в потомках реализуйте абстракции сами же говорите: Anatoly KИспользую я их одинаковым образом, т.е. интерфейс у них(списков) вроде бы одинаковый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:28 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Я бы предложил использовать обычную иерархию классов коллекции вместе с паттерном Singleton - для каждого класса коллекции свой едиственный статический экземляр. Ну и получилось бы примерно так: класс_списка.метод(); а внутри него: класс_списка.getInstance().методЭкземпляра() Впрочем, доступ к статическому экземпляру, можно вынести в какой-нибудь фасад, например, так: Код: plaintext 1. При этом внешний по отношению к фасаду код не будет знать откуда берутся коллекции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=829&tid=2153344]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 323ms |

| 0 / 0 |
