Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Статические методы vs фабрики классов


Автор: Barvetal 27.9.2006, 19:53
Всем привет!

Мне интерестно, а чем использование Factory лучше чем использование статических методов? И чем вообще плохи статические методы? И зачем вообще нужны Factory?

Приведу пример:
1) Использование фабрики классов:
Пусть у меня есть класс RubricDao:
Код

public class RubricDao {
    public List<Rubric> findAll() {
        ...
    }
}

Тогда использование этого класса в другом участке кода такое:
Код

rubricDao = DaoFactory.getRubricDao();
List rubrics = rubricDao.findAll();


2) Использование статических методов:
Пусть у меня есть класс RubricDao:
Код

public class RubricDao {
    public static List<Rubric> findAll() {
        ...
    }
}

Тогда использование этого класса в другом участке кода такое:
Код

List rubrics = RubricDao.findAll();



Так вот, в упор не вижу, чем первое решение лучше, чем второе. Да, в первом случае нету статических методов. Но зато во втором случае везде достаточно вызвать одну строчку кода для вызова метода findAll(), и не нужно дергать никаких фабрик и писать две строчки кода.

Вобщем, обьясните, пожалуйста, какое решение лучше, и какая вообще польза от фабрик? Читал о фабриках статьи, но так и не понял, в чем преимущество. Обьясните, пожалуйста, на пальцах.

Всем заранее спасибо!

Автор: y3u 27.9.2006, 20:33
ну, скажем так, приведенный пример не совсем отражает суть Factory паттерна smile Это действительно случай, когда можно воспользоваться простым утильным классиком, с приватным дефолтным конструктором и с паблик статик методами. Допустим есть несколько связанных интерфейсов, допустим, отнаследованных от какого-нибудь общего интерфейса, нам нужно получить инстанс какого-нибудь класса, при чем какой именно объект будет возвращаться фабрикой методом getInstance() может зависеть от ряда факторов. Приведенный пример можно бы было притянуть за уши к фабрик методу, в случае, если, метод возвращал бы Collection, при чем в зависимости от каких-нибудь факторов, этот метод возвращал бы либо List, либо HashSet и т.д....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)