![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| zone51 |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Уважаемые форумчане, у меня возник вопрос такого рода:
В общем есть 6 классов но смысл их работы одинаков-они все обрабатывают файлы но разных (похожих) форматов. Так вот. Во всех классах есть часть логики которая везде абсолютно одинакова. К примеру взять то что получилось и запихнуть в БД. Чтобы не реализовывать логику много раз в каждом классе естественно я решил в отдельном файле написать вспомогательный класс, а потом в каждом классе создавать экземпляр этого вспомогательного класса, просто вызывая его методы. НО. У меня возникла идея какого рода: к примеру org.apache.commons.VFS. Там я делаю:
или
Так вот не логичнее было бы организовать в моих классах вместо
Сделать так
или на худой конец
Как это сделать? Какие есть особенности в написани таких классов? Спасибо. Это сообщение отредактировал(а) zone51 - 27.1.2007, 18:44 -------------------- The truth is out there |
||||||||||
|
|||||||||||
| connectionlost |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2006 Где: MO Репутация: нет Всего: нет |
Может я чаго не понимаю =\\
Но какие там могут быть особенности ?
Или что-то не то ? |
|||
|
||||
| zone51 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
connectionlost,
Вы не так поняли. В описанном вами случае в основном коде где подключается helper было бы так:
Плохо то что создается много одинаковых обьектов. А надо
или
И всё, то есть не создаются новые обьекты а просто берется сылка и статически выполняется какой то код. Это удобно так как не надо держать память под экземпляры helper. Это можно когда нет необходимости внутри класса helper держать значения переменных. Так вот как это реализовать? Спасибо. Это сообщение отредактировал(а) zone51 - 27.1.2007, 20:31 -------------------- The truth is out there |
||||||
|
|||||||
| $tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: нет Всего: 22 |
Нет, не так. Метод help - статический. Он НЕ ТРЕБУЕТ экземпляра класса. С другой стороны в классе могут быть и методы, требующие экземпляра (нестатические). Вот тогда для их использования и надо будет создавать экземпляр. Если нестатических методов не используется, то класс можно сделать целиком статическим. Для такого класса экземпляра создать нельзя. |
|||
|
||||
| Shurr |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 24.10.2006 Репутация: 5 Всего: 7 |
zone51
Это вы не поняли. Методы, объявленные как static не требуют создания экземпляра класса. В ситуации, описанной connectionlost, методы могут вызываться так:
Почитайте по этому поводу про статические методы в Java. Ситуация типа
обычно применяется в случае, когда для выполнения методов требуется некоторая предварительная инициализация. Если вас это заинтересовало - почитайте про паттерн Singleton. Ключевые слова - шаблоны проектирования (design patterns), одиночка (singleton). |
||||
|
|||||
| zone51 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
$tatic,
Shurr То биш
и потом
Не вызовет ошибки? То есть в этом случае памяти под экземпляр не дается, только вызывется логика и все..ыхь.. крута. Спасибо всем, буду дальше думать.. Это сообщение отредактировал(а) zone51 - 27.1.2007, 21:34 -------------------- The truth is out there |
||||
|
|||||
| katala |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 15.4.2006 Репутация: нет Всего: нет |
если я понял ты используешь методы одного и того же класса??? тогда не легче ли сделать Вспомогательныйкласс абстрактным а потом в своих шести классах релизовать эти медоты так как нужно для каждого класса
|
|||
|
||||
| Hidrag |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
хммм а если так:
то есть класс по паттрену "одиночка" создается всегда 1 экземпляр класса, методы которого и вызваешь
ну или так:
-------------------- |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Синглетон в данном случае предпочтительней статик методов, т.к. внутри есть переменные требующие инициализации (например FileSystemManager).
Если предпологается использовать этот класс в многопоточном приложении, то синглетон лучше заменить на фабрику. P.S. Описание шаблонов проектирования есть у нас в FAQ. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |