Fluent Interfacesсемантические фасады. Вы помещаете их поверх существующего кода, чтобы уменьшить синтаксический шум и более четко выразить то, что делает код на вездесущем языке. Это шаблон, используемый при создании внутреннего домена. Речь идет о читаемости.
Директор/строитель организует строительство чего-то. То есть, если вы строите машину для выпечки пиццы, Директор будет следить за тем, чтобы шаги от заказа до пиццы выполнялись в правильном порядке с правильными данными с помощью правильного строителя. Речь идет о валидации и делегировании.
Вы можете, конечно, установить Fluent Interface поверх шаблона Director/Builder, чтобы он читал больше - хорошо и подчеркивал концепцию домена (по сравнению с техническим процессом построения и делегирования). Тогда это будет Expression Builder.
Я хотел бы подчеркнуть, что Fluent Interfaces - это не только Method Chaining. Это распространенное заблуждение. Метод Chaining - это один из подходов к реализации Fluent Interface, но это не одно и то же, поскольку в нем отсутствуют семантические качества, например.это не является Свободным Интерфейсом:
SomeObject.setFoo(1).setBar(2).setBaz(3);
Вышеупомянутое не выражает ничего о SomeObject. Это не фасад над некоторой семантической моделью. Это всего лишь несколько методов. Примером Fluent Interface может быть построитель запросов SQL, например.
SQLBuilder.select('foo').from('bar').where('foo = ?', 42).prepare();
Под капотом этого API лежит код для создания инструкции SQL. Он может включать в себя несколько объектов, и показанные вызовы могут очень хорошо создать объект Select, вызвать его установщик, создать объект условия и применить его к объекту Select и, наконец, вернуть объект Statement. Но все, что скрыто от нас. Это также подчеркивает еще один аспект Свободных интерфейсов: они могут нарушать SOLID и Law of Demeter. Но так как это фасад поверх кода, который, надеюсь, следует этим принципам дизайна, это не имеет большого значения, потому что вы локализуете нарушения в Fluent Interface.
* Могу ли я использовать шаблон Builder и свободный интерфейс вместе? * Да, вы можете, есть отличный пример, размещенный [здесь] (http://stackoverflow.com/q/1673841/1065197) –
Другие примеры находятся на странице http://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern/. –
Могу ли я узнать, как этот вопрос дублирует упомянутый выше вопрос? Поскольку речь идет о связи между свободным интерфейсом и шаблоном строителя. – Sagar