我最近遇到了这个表达 - 但在维基百科上阅读并没有对我来说很清楚 - 我仍然不明白:
- 它有什么意义
- 它在实践中是如何使用的(即它如何使编码人员在他们的日常工作/构建系统中受益)?
[编辑] Wikipedia 文章 C++ 示例过长,将流畅界面的讨论与简单的 Glut 应用程序示例混为一谈。有人可以提供一个说明流畅接口的类的 SUCCINCT C++ 示例(例如,这种影响与普通 C++ 接口有何不同)?
我最近遇到了这个表达 - 但在维基百科上阅读并没有对我来说很清楚 - 我仍然不明白:
[编辑] Wikipedia 文章 C++ 示例过长,将流畅界面的讨论与简单的 Glut 应用程序示例混为一谈。有人可以提供一个说明流畅接口的类的 SUCCINCT C++ 示例(例如,这种影响与普通 C++ 接口有何不同)?
它通过减少他必须输入(和阅读)的数量来使编码人员受益。
要使用 Wikipedia 上的 C++ 示例:
前:
int main(int argc, char **argv) {
GlutApp app(argc, argv);
app.setDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_ALPHA|GLUT_DEPTH); // Set framebuffer params
app.setWindowSize(500, 500); // Set window params
app.setWindowPosition(200, 200);
app.setTitle("My OpenGL/GLUT App");
app.create();
}
后:
int main(int argc, char **argv) {
FluentGlutApp app(argc, argv);
app.withDoubleBuffer().withRGBA().withAlpha().withDepth()
.at(200, 200).across(500, 500)
.named("My OpenGL/GLUT App");
app.create();
}
术语“流利的界面”有不同的解释。在 C++ 中创建一个的常用方法是方法链接,例如 iostream 库中常用的方法:
Object.MethodA().MethodB();
cout << "a = " << a;
Named Parameter Idiom是另一个很好的流畅接口示例:
Window w = CreateWindow()
.Width(400)
.Height(300)
.OnTop();
好处?更易读、更灵活的代码,当然这仍然取决于实现。
fluent 接口的一大区别和优势是,当您想要创建对象并将其用作参数时,您不需要实例变量来更改某些属性:
没有:
Object object;
object.setcolor("red");
object.setstyle("solid");
object.setname("test");
world.CreateNode(object);
流畅的界面:
world.CreateNode(Object()
.setcolor("red")
.setstyle("solid")
.setname("test")
);
用一点(非常简单的)JavaScript 来描述新的重要概念并没有错。在 C++ 中也完全可行。
关键概念:使用函数式编程习语,描述接口。不使用:消息参数作为字符串,被解析,概念。
我认为它主要与“Facade”模式有关,但是是的,它与“Builder 模式”有关。它似乎也从“Monads”中幸存下来。
顺便说一句:上面所有的倡导者都提出了非常好的用例。