Шаблон "фабрика". Когда использовать методы фабрики?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

261
задан Ravindra babu 3 June 2016 в 05:09
поделиться

6 ответов

Классы фабрики являются большим количеством тяжеловеса, но дают Вам определенные преимущества. В случаях, когда необходимо создать объекты от нескольких, источники необработанных данных, они позволяют Вам инкапсулировать только логику здания (и возможно агрегирование данных) в одном месте. Там это может быть протестировано в кратком обзоре, не касаясь интерфейса объекта.

я нашел это полезным шаблоном, особенно где я неспособен заменить и несоответствующий ORM и хотеть эффективно инстанцировать многих объектов от соединений Таблицы базы данных или хранимых процедур.

0
ответ дан jonfm 23 November 2019 в 02:34
поделиться

Классы фабрики полезны для того, когда тип объекта, который они возвращают, имеет частного конструктора, когда различные классы фабрики устанавливают различные свойства на объекте возврата, или когда определенный тип фабрики вместе с его типом бетона возврата.

WCF использует классы ServiceHostFactory для получения объектов ServiceHost в различных ситуациях. Стандартный ServiceHostFactory используется IIS для получения экземпляров ServiceHost для .svc файлы, но WebScriptServiceHostFactory используется для сервисов, которые возвращают сериализацию клиентам JavaScript. Услуги передачи данных ADO.NET имеют его собственный специальный DataServiceHostFactory, и ASP.NET имеет его ApplicationServicesHostFactory, так как его сервисы имеют частных конструкторов.

, Если у Вас только есть один класс, это использует фабрику, тогда можно просто использовать метод фабрики в том классе.

4
ответ дан Mark Cidade 23 November 2019 в 02:34
поделиться

Они также полезны, когда Вам нужны несколько "конструкторов" с тем же типом параметра, но с различным поведением.

14
ответ дан Rik 23 November 2019 в 02:34
поделиться

Это - действительно вопрос вкуса. Классы фабрики могут быть абстрагированы/соединены интерфейсом далеко по мере необходимости, тогда как методы фабрики являются более легким весом (и также будьте склонны быть тестируемыми, так как у них нет определенного типа, но они потребуют известной регистрационной точки, сродни сервисному локатору, но для определения местоположения методов фабрики).

5
ответ дан Brad Wilson 23 November 2019 в 02:34
поделиться

Методы фабрики нужно рассмотреть как альтернативу конструкторам - главным образом, когда конструкторы не достаточно выразительны, т.е.

class Foo{
  public Foo(bool withBar);
}

не так выразительно как:

class Foo{
  public static Foo withBar();
  public static Foo withoutBar();
}

классы Фабрики полезны при необходимости в сложном процессе для построения объекта когда конструкция нуждается в зависимости, которую Вы не хотите для фактического класса, когда необходимо создать различные объекты и т.д.

89
ответ дан Rasmus Faber 23 November 2019 в 02:34
поделиться

Мне нравится думать о шаблонах дизайна с точки зрения моих классов, являющихся «людьми». , 'а шаблоны - это способы, которыми люди разговаривают друг с другом.

Итак, для меня заводская модель похожа на агентство по найму. У вас есть кто-то, кому потребуется переменное количество рабочих. Этот человек может знать некоторую информацию, которая ему нужна в людях, которых он нанимает, но это все.

Итак, когда им нужен новый сотрудник, они звонят в агентство по найму и говорят им, что им нужно. Теперь, чтобы на самом деле нанять кого-то , вам нужно знать много вещей - льготы, подтверждение права на участие и т.д. .

Точно так же использование Factory позволяет потребителю создавать новые объекты без необходимости знать подробности того, как они созданы, или каковы их зависимости - им нужно только предоставить ту информацию, которую они действительно хотят.

public interface IThingFactory
{
    Thing GetThing(string theString);
}

public class ThingFactory : IThingFactory
{
    public Thing GetThing(string theString)
    {
        return new Thing(theString, firstDependency, secondDependency);
    }
}

Итак, теперь потребитель ThingFactory может получить Thing без необходимости знать о зависимостях Thing, за исключением строковых данных, которые поступают от потребителя.

379
ответ дан 23 November 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: