Java 设计一个带有级联函数调用的API(Class.doThis(";…).doThat(";)…)

Java 设计一个带有级联函数调用的API(Class.doThis(";…).doThat(";)…),java,api,oop,design-patterns,Java,Api,Oop,Design Patterns,我已经看到一些API的设计方式,您必须使用它们,如下代码所示 Class.doThis("...").doThat("...")..... 例如,HTTPCommon(Fluent API)可以用作: Request.Get("http://somehost/") .connectTimeout(1000) .socketTimeout(1000) .execute().returnContent().asString(); JobDetail

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

Class.doThis("...").doThat("...").....
例如,HTTPCommon(Fluent API)可以用作:

Request.Get("http://somehost/")
        .connectTimeout(1000)
        .socketTimeout(1000)
        .execute().returnContent().asString();
JobDetail job = newJob(HelloJob.class)
               .withIdentity("job1", "group1")
               .build();
Captcha captcha = new Captcha.Builder(200, 50)
                  .addText()
                  .addBackground()
                  .addNoise()
                  .gimp()
                  .addBorder()
石英表可用作:

Request.Get("http://somehost/")
        .connectTimeout(1000)
        .socketTimeout(1000)
        .execute().returnContent().asString();
JobDetail job = newJob(HelloJob.class)
               .withIdentity("job1", "group1")
               .build();
Captcha captcha = new Captcha.Builder(200, 50)
                  .addText()
                  .addBackground()
                  .addNoise()
                  .gimp()
                  .addBorder()
SimpleCattch可以用作:

Request.Get("http://somehost/")
        .connectTimeout(1000)
        .socketTimeout(1000)
        .execute().returnContent().asString();
JobDetail job = newJob(HelloJob.class)
               .withIdentity("job1", "group1")
               .build();
Captcha captcha = new Captcha.Builder(200, 50)
                  .addText()
                  .addBackground()
                  .addNoise()
                  .gimp()
                  .addBorder()

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

这只是一个构建器模式。发件人:

动机

应用程序越复杂,类和类的复杂性就越高 使用的对象增加。复杂对象是由以下部件构成的: 建造时需要特别注意的其他物体。申请书 可能需要一种用于构建复杂对象的机制 独立于构成对象的对象。如果这是 遇到的问题,您可能希望尝试使用 生成器(或自适应生成器)设计模式

此模式允许客户端对象通过 仅指定其类型和内容,不受详细信息的影响 与对象的表示相关。这样就可以进行施工 过程可用于创建不同的表示形式。逻辑 此过程与创建 复杂对象,因此可以再次使用该过程来创建不同的 对象与第一个对象形成相同的简单对象集


基本上,如果对象的构建过程有点复杂,并且希望公开一种声明式的构建方法,则可以使用它。

您的第一个示例可以称为方法链接。
其他示例包括生成器模式、方法链接和fluent界面

关于问题的第二部分,请参阅和链接问题。

正如HTTPCommon所指出的,它的简称是“流畅”。构建器通常有一个流畅的布局,但构建器模式是正交的:fluent API是关于可读的链式方法调用,而构建器是关于为对象指定一个完整的配置,然后立即以完整的状态构建它

无论何时,只要代码可读,这种风格都是合适的;当IDE自动完成可以帮助程序员时,它尤其有用。两个最常见的用例是配置(构建器或Spring风格的配置器)和数据管道(如Java8流和反应式编程)