На самом деле между этими двумя паттернами есть четкое разделение. Общеизвестно, что оба шаблона используются, чтобы избежать зависимости от конкретных типов.
Однако после прочтения
Возникают серьезные противоречия:
Земанн сказал: «Абстрактная фабрика - это универсальный тип, и тип возвращаемого значения метода Create определяется типом самой фабрики. Другими словами, сконструированный тип может возвращать только экземпляры одного типа».
В то время как Робер К. Мартин ничего не упомянул об общих типах и, более того, пример фабрики в своей книге позволяет создавать экземпляры более одного типа объектов, различать их, используя ключевую строку в качестве параметра в Factory.Make ().
Гамма сказал, что цель Abstract Factory состоит в том, чтобы «предоставить интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов». Стоит упомянуть, что пример Gamma Abstract Factory нарушает принцип разделения интерфейса (ISP), заявленный Мартином. ISP и SOLID в целом являются более современными принципами или, возможно, для простоты они опущены.
Работы Гаммы и Мартина предшествуют работам Симана, поэтому я думаю, что он должен следовать уже данному определению.
В то время как Фаулер предлагает Service Locator как способ реализации инверсии зависимостей, Зееманн рассматривает его как анти-шаблон. Ни Гамма, ни Мартин не упоминают Service Locator.
Однако Земанн и Фаулер согласились с тем, что локатору служб требуется этап конфигурации для регистрации экземпляра конкретного класса, этот экземпляр будет возвращен позже, когда будет запрошен объект такого типа. Этот шаг настройки не упоминается Мартином или Гаммой в их определении Abstract Factory. Шаблон «Абстрактная фабрика» предполагает, что новый объект создается каждый раз, когда запрашивается объект такого типа.
Заключение
Основное различие между Service Locator и Abstract Factory состоит в том, что Abstract Factory предполагает, что новый объект создается и возвращается при каждом запросе, а Service Locator должен быть настроен с экземпляром объекта, и каждый раз будет возвращаться один и тот же экземпляр.
person
jfuentes
schedule
08.02.2015