Свободный интерфейс, который придумал термин Эрик Эванс, и это просто еще одно название для цепочки методов. Мартин Фаулер написал пару из статей на эту тему, но примерно это выглядит так:
m_Window = window::with()
.width(l_Width)
.height(l_Height)
.title("default window")
.left(200)
.top(200)
.create();
Свободный интерфейс обычно используется для создания именованных параметров на языке, который их не поддерживает (например, Идиома именованных параметров в C ++), или в доменных языках, чтобы код читался более свободно.
Я видел, как они используются для всего: от библиотек обработки изображений до библиотек регулярных выражений и 3D-библиотек. Другие примеры включают построение древовидных структур, списков или других структур данных. Все, что требует построения сложных объектов (загрузки параметров), может использовать Fluent Interfaces, чтобы сделать его более читабельным. Например, сравните предыдущий пример с вызовом функции CreateWindow:
::CreateWindow(
"Window class",
"Window title",
dwStyle, X, Y,
nWidth, nHeight,
hWndPant, hMenu,
hInstance, NULL
);