Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание статического класса, Просто контейнер методов 
:(
    Опции темы
zone51
  Дата 27.1.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Уважаемые форумчане, у меня возник вопрос такого рода:
В общем есть 6 классов но смысл их работы одинаков-они все обрабатывают файлы но разных (похожих) форматов. Так вот. Во всех классах есть часть логики которая везде абсолютно одинакова. К примеру взять то что получилось и запихнуть в БД. Чтобы не реализовывать логику много раз в каждом классе естественно я решил в отдельном файле написать вспомогательный класс, а потом в каждом классе создавать экземпляр этого вспомогательного класса, просто вызывая его методы. НО.
У меня возникла идея какого рода: к примеру org.apache.commons.VFS. Там я делаю:
Код

FileSystemManager man=VFS.getManager()

или
Код

Factory f=какая-тоFactory.getInstance()

Так вот не логичнее было бы организовать в моих классах вместо
Код

Вспомогательныйкласс k=new Вспомогательныйкласс(...)
к.метод(...).

Сделать так
Код

Вспомогательныйкласс.метод(....)

или на худой конец
Код

Вспомогательныйкласс.getInstance().метод(...)

Как это сделать? Какие есть особенности в написани таких классов? Спасибо. smile  smile 

Это сообщение отредактировал(а) zone51 - 27.1.2007, 18:44


--------------------
The truth is out there
PM MAIL   Вверх
connectionlost
Дата 27.1.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2006
Где: MO

Репутация: нет
Всего: нет



Может я чаго не понимаю =\\
Но какие там могут быть особенности ?
Код

public class Helper {
 public static void help(java.io.OutputStream out){
   out.write("help");
}
 
 public static void main(String args[]){
  Helper.help(System.out);
}

}


Или что-то не то ?
PM   Вверх
zone51
  Дата 27.1.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



connectionlost, 
Вы не так поняли.
В описанном вами случае в основном коде где подключается helper было бы так:
Код

helper h=new helper()
helper.help(..)

Плохо то что создается много одинаковых обьектов.
А надо
Код

helper.help(..)

или
Код

helper.getInstance.help(..)

И всё, то есть не создаются новые обьекты а просто берется сылка и статически выполняется какой то код. Это удобно так как не надо держать память под экземпляры helper. Это можно когда нет необходимости внутри класса helper держать значения переменных. Так вот как это реализовать?
Спасибо.

Это сообщение отредактировал(а) zone51 - 27.1.2007, 20:31


--------------------
The truth is out there
PM MAIL   Вверх
$tatic
Дата 27.1.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: нет
Всего: 22



Цитата(zone51 @  27.1.2007,  21:30 Найти цитируемый пост)
В описанном вами случае в основном коде где подключается helper было бы так

Нет, не так. Метод help - статический. Он НЕ ТРЕБУЕТ экземпляра класса. С другой стороны в классе могут быть и методы, требующие экземпляра (нестатические). Вот тогда для их использования и надо будет создавать экземпляр.
Если нестатических методов не используется, то класс можно сделать целиком статическим. Для такого класса экземпляра создать нельзя.
PM MAIL   Вверх
Shurr
Дата 27.1.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 24.10.2006

Репутация: 5
Всего: 7



zone51
Это вы не поняли. Методы, объявленные как static не требуют создания экземпляра класса. В ситуации, описанной connectionlost, методы могут вызываться так:
Код

Helper.help(input)

Почитайте по этому поводу про статические методы в Java.

Ситуация типа 
Код

Helper.getInstance().help(input)

обычно применяется в случае, когда для выполнения методов требуется некоторая предварительная инициализация. Если вас это заинтересовало - почитайте про паттерн Singleton. Ключевые слова - шаблоны проектирования (design patterns), одиночка (singleton). 
PM MAIL   Вверх
zone51
  Дата 27.1.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



$tatic, 
Shurr
То биш
Код

class helper{
public static void help(){
System.out.println("help");
}
}

и потом
Код

class someclass{
void somevoid(){
...
helper.help(..)
...
}
}

Не вызовет ошибки? То есть в этом случае памяти под экземпляр не дается, только вызывется логика и все..ыхь..
крута.
 smile  smile 
Спасибо всем, буду дальше думать..

Это сообщение отредактировал(а) zone51 - 27.1.2007, 21:34


--------------------
The truth is out there
PM MAIL   Вверх
katala
Дата 27.1.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 15.4.2006

Репутация: нет
Всего: нет



если я понял ты используешь  методы одного и того же класса??? тогда не легче ли сделать Вспомогательныйкласс абстрактным а потом в своих шести классах релизовать  эти медоты так как нужно для каждого класса
PM MAIL   Вверх
Hidrag
Дата 27.1.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



хммм а если так:


Код

public class MyCoolClass {
    
    private static MyCoolClass instance;
       
    public static synchronized MyCoolClass getInstance() {
        if (instance == null) {
             instance = new MyCoolClass();
        } 
        return instance;
    }
    
    public void blabla() {
       //операции
    }
}

то есть класс по паттрену "одиночка" создается всегда 1 экземпляр класса, методы которого и вызваешь
Код

MyCoolClass dbm = MyCoolClass.getInstance();
dbm.blabla();

ну или так:
Код

MyCoolClass.getInstance().blabla();



--------------------
user posted image
PM WWW ICQ   Вверх
LSD
Дата 29.1.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.