什么是流畅的界面? CallStream

问题描述 投票:14回答:4

我最近遇到了这个表达 - 但是阅读on Wikipedia并没有为我澄清这一点 - 我仍然没有得到它:

  1. 有什么意义呢
  2. 它是如何在实践中使用的(即它如何使编码人员在日常工作/建筑系统中受益)?

[编辑]维基百科文章C ++示例过长,并将流畅的界面讨论与简单的Glut应用程序的示例混为一谈。有人可以提供一个类的SUCCINCT C ++示例来说明一个流畅的界面(例如,这种影响与普通的C ++界面有何不同)?

c++ coding-style fluent-interface
4个回答
10
投票

它通过减少打字(和阅读)的数量而使编码人员受益。

要在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();
 }

8
投票

对“流畅的界面”一词有不同的解释。在C ++中创建一个的常用方法是方法链,它通常用于例如iostream库:

Object.MethodA().MethodB();
cout << "a = " << a;

Named Parameter Idiom是流畅界面的另一个很好的例子:

Window w = CreateWindow()
               .Width(400)
               .Height(300)
               .OnTop();

好处?代码更易读,更灵活,但仍然取决于课程的实施。


2
投票

流畅接口的一个重要区别和优点是,当您要创建对象并将其用作参数时,您不需要实例变量来更改某些属性:

无:

Object object;
object.setcolor("red"); 
object.setstyle("solid");
object.setname("test");
world.CreateNode(object);

界面流畅:

world.CreateNode(Object()
                                           .setcolor("red")
                                           .setstyle("solid")
                                           .setname("test")
                             );

0
投票

CallStream aka "Why the dot's ?" :)

用一些(非常简单的)JavaScript来描述新的和重要的概念没有错。在C ++中完全可行。也是

关键概念:使用功能编程习语,描述界面。不使用:message参数作为字符串,进行解析,概念。

我认为它主要与“Facade”模式有关,但是,它与“Builder模式”有关。它似乎也幸免于“Monads”。

顺便说一句:上面的所有倡导者都提出了非常好的用例。

© www.soinside.com 2019 - 2024. All rights reserved.