Fluent Interface 流畅接口风格的 API

/ OO Design / 531浏览

在软件工程中,Fluent Interface 流畅接口,是构建面向对象的API的一种方法,其中源代码的可读性接近普通书面散文。它是由Martin Fowler和Eric Evans创造的,流畅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 或其他),是不是看起来又清爽又易懂。