使用级联函数调用设计API(Class.doThis("...").doThat("...").....)

Ali*_*ahi 2 java oop api design-patterns

我已经看到一些API的设计方式必须使用它们如下面的代码

Class.doThis("...").doThat("...").....
Run Code Online (Sandbox Code Playgroud)

例如,HTTPCommon(Fluent API)可用作:

Request.Get("http://somehost/")
        .connectTimeout(1000)
        .socketTimeout(1000)
        .execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)

石英计划可用作:

JobDetail job = newJob(HelloJob.class)
               .withIdentity("job1", "group1")
               .build();
Run Code Online (Sandbox Code Playgroud)

SimpleCatptch可用作:

Captcha captcha = new Captcha.Builder(200, 50)
                  .addText()
                  .addBackground()
                  .addNoise()
                  .gimp()
                  .addBorder()
Run Code Online (Sandbox Code Playgroud)

这种API设计的名称是什么?这样的设计好吗?

chr*_*ke- 5

正如HTTPCommon所说,它简称为"流畅".构建器通常具有流畅的布局,但构建器模式是正交的:Fluent API是关于可读的链式方法调用,而构建器是关于为对象指定完整配置,然后一次完整地构建它.

只要它使代码可读,这种风格就适用; 当IDE自动完成可以帮助程序员时,它特别有用.两个最常见的用例是配置(构建器或Spring样式的配置器)和数据管道(例如Java 8流和反应式编程).