在软件工程中,Fluent Interface 流畅接口,是构建面向对象的API的一种方法,其中源代码的可读性接近普通书面散文。它是由Martin Fowler和Eric Evans创造的,流畅API意味着你构建一个API需要遵循以下要点:
- API用户能够容易理解API
- API为完成一个任务能够执行一系列动作,比如Java中可以看成是一系列方法调用,方法链。
- 每个方法名称应该是与业务领域相关的专门术语
- API应该能提示指导API用户下一步用什么,以及某个时刻用户可能采取的操作
Java中示例
定义Country类:
package cn.zealon.fluentinterface;
public class Country {
private String name;
private int code;
private boolean isDevelopedCountry;
private int area;
Country addName(String name) {
this.name = name;
return this;
}
Country addCountyCode(int code) {
this.code = code;
return this;
}
Country setDeveloped(boolean isdeveloped) {
this.isDevelopedCountry = isdeveloped;
return this;
}
Country setAread(int area) {
this.area = area;
return this;
}
}
调用类:
public class TestFluent{
public static void main(String[] args) {
Country china = new Country();
china.addName("The People's Republic of China")
.addCountyCode(1001)
.setDeveloped(false)
.setAread(960);
}
}
Country 的方法返回本身country,使调用者有了继续调用country方法的能力。
Zookeeper中示例
Zookeeper的curator客户端有基于Fluent接口风格创建会话如下:
/**
* Fluent接口风格创建会话
*/
public static CuratorFramework createSessoinByFluent(){
//重试策略
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
//创建zookeeper客户端
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(connectString)
.sessionTimeoutMs(sessionTimeoutMs)
.connectionTimeoutMs(connectionTimeoutMs)
.retryPolicy(retryPolicy)
.namespace("base") //隔离命名空间(每个业务分配一个独立的命名空间)
.build();
return client;
}
⭐ 所以对于 Fluent Interface 而言,它的接口调用既改变了对象的状态,又返回了对象(this 或其他),是不是看起来又清爽又易懂。
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。