我最近遇到了这个表达 - 但是阅读on 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)
.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();
好处?代码更易读,更灵活,但仍然取决于课程的实施。
流畅接口的一个重要区别和优点是,当您要创建对象并将其用作参数时,您不需要实例变量来更改某些属性:
无:
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 ++中完全可行。也是
关键概念:使用功能编程习语,描述界面。不使用:message参数作为字符串,进行解析,概念。
我认为它主要与“Facade”模式有关,但是,它与“Builder模式”有关。它似乎也幸免于“Monads”。
顺便说一句:上面的所有倡导者都提出了非常好的用例。