URIBuilder简介

URIBuilder主要用于构造URI,URI即"通一资源标志符(Uniform Resource Identifier, URI)",表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行定位的。URL是URI的一个子集,它是Uniform Resource Locator的缩写,译为"统一资源定位符"。

URIBuilder构造函数

URIBuilder()
URIBuilder(final String string) 内部会创建URI对象
URIBuilder(final URI uri)

备注:非空的两个构造实际内部都调用了digestURI(uri) 将URI对象解析并赋值给类的属性

URIBuilder正是采用了至少有7个参数,如果要满足各种需求的组合,恐怕总共要提供n种构造函数,显然不现实。然而,URIBuilder既可以造出一个不可变的URI,又可以兼顾N种参数。URIBuilder可以这样用:

//http://www.httpclient.cn/search/?s=httpclient

URI uri = new URIBuilder()
    .setScheme("http")
    .setHost("www.httpclient.cn")
    .setPath("/search")
    .setParameter("s", "httpclient")
    .build();

建造者模式。

等号右边实际上是一行,先创建一个URIBuilder对象实例,调用实例的setScheme方法,此方法顺便返回URIBuilder对象实例,刚刚返回的这个实例调用setHost方法,...,最后一个返回的URIBuilder对象实例调用build方法,返回URI对象。它是如何实现的呢?

原来的URI类的set方法的基础上,添加一个返回值,返回URIBuilder自己就够了:

class URIBuilder{
    public URIBuilder setScheme(String scheme){
    ...
        return this;
    }
 
    public URIBuilder setHost(String host){
    ...
        return this;
    }
 
    public URIBuilder setPath(String path){
    ...
        return this;
    }
 
    //built 方法,把参数拼接,然后返回一个URI类
    public URI built(){
    ...
        return uri;
    }
}

由于URIBuilder每次都返回它自己,所以可以连续的执行set方法,最后通过built方法返回URI类。