11、构建者模式java
构建者模式主要是用于建立复杂的一些对象,这些对象的建立步骤基本固定,可是可能具体的对象的组成部分却又能够自由的变化,好比房子装修,我能够在卧室里放电视,也能够不放电视,我还能够摆个电脑,这些属性能够自由变化。测试
要构建这样一个对象,就须要一个建立一个Builder,用于构建须要的对象。ui
import java.util.HashMap; import java.util.Map; /** * 专门用于Http请求的类 * 设置请求参数,请求头 * 支持重试,默认重试3次 * @author Lynn * */ public final class Request { //专门用于存储请求参数 private Map<String,Object> params = new HashMap<String,Object>(); //专门用于存储请求头 private Map<String,Object> headers = new HashMap<String,Object>(); private int retry = 3;//重试次数(默认为3次) private String url;//请求的url地址 private int timeout = 30 * 1000;//链接有效时间,默认为10s private Method method = Method.GET;//请求方法,默认为get public static class Builder{ //专门用于存储请求参数 private Map<String,Object> params = new HashMap<String,Object>(); //专门用于存储请求头 private Map<String,Object> headers = new HashMap<String,Object>(); private int retry = 3;//重试次数(默认为3次) private String url;//请求的url地址 private int timeout = 30 * 1000;//链接有效时间,默认为30s private Method method = Method.GET;//请求方法,默认为get /** * 添加请求参数 * @param key * @param value * @return */ public Builder addParameter(String key,Object value){ params.put(key, value); return this; } /** * 添加请求头 * @param key * @param value * @return */ public Builder addHeader(String key,Object value){ headers.put(key, value); return this; } /** * 设置重试次数(默认3次) * @param retry * @return */ public Builder setRetry(int retry){ this.retry = retry; return this; } /** * 设置url地址 * @param url * @return */ public Builder setUrl(String url){ this.url = url; return this; } /** * 设置超时时间(默认30s) * @param timeout * @return */ public Builder setTimeout(int timeout){ this.timeout = timeout; return this; } /** * 设置请求方法(默认为GET) * @param method * @return */ public Builder setMethod(Method method){ this.method = method; return this; } public Request build(){ return new Request(this); } } public static Request.Builder options(){ return new Builder(); } private Request(Builder builder){ this.params = builder.params; this.headers = builder.headers; this.retry = builder.retry; this.timeout = builder.timeout; this.url = builder.url; this.method = builder.method; } /** * 得到全部请求参数 * @return */ public Map<String,Object> getParameters(){ return this.params; } /** * 得到全部请求头 */ public Map<String,Object> getHeaders(){ return this.headers; } /** * 得到重试次数 * @return */ public int getRetry(){ return this.retry; } /** * 得到超时时间 * @return */ public int getTimeout(){ return this.timeout; } /** * 得到url地址 * @return */ public String getUrl(){ return this.url; } /** * 设置请求方法 * @return */ public Method getMethod(){ return this.method; } }
Request request = Request.options() .setTimeout(5*1000) .setUrl("http://localhost:8081/test/index") .addParameter("name", "") .setRetry(3) .addHeader("", "") .build();构建者模式相对于普通的JavaBean中的setter/getter而言,优点是明显的,就是经过builder就能建立对象,而且为属性赋值,而不用每次都经过setter方法来赋值,从而提升了程序的可读性和可扩展性。