Java 设计一个带有级联函数调用的API(Class.doThis(";…).doThat(";)…)
我已经看到一些API的设计方式,您必须使用它们,如下代码所示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
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流和反应式编程)