Как совместить фабрику и закон Деметры?
=========================================

 Доброго вечера.  

Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод. Получается, использовать фабрики - это вынужденное зло, и код с фабриками априори хуже кода, который следует закону Деметры? Ведь даже если я просто верну объект из функции, не вызывая его, данный закон будет нарушать уже другой класс.  
  

Если это вопрос удобства, то что в большинстве случаев объективно лучше игнорировать? Являются ли фабрики почти антипаттерном, которых нужно избегать до последнего? И есть ли решение, позволяющее усидеть на двух стульях?  
  

Заранее спасибо. 

> Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод.

  

Фабрика возвращает интерфейс объекта, который был специально введён, чтобы предоставить обобщённый доступ к разным типам объектов создаваемых фабрикой. Пользователи фабрики взаимодействуют только с этими интерфейсами, не с самими объектами. Т.о. пользователи фабрики не зависят от модулей реализующих конкретные объекты. Закон Деметры как раз и нужен для того, чтобы уменьшить зацепление между модулями. Следуйте духу закона, а не букве.