java23种设计模式十一(连载)

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;
	}
}

此处构建的是HTTP请求经常使用的一些属性,这些属性能够任意的组合,最后请看测试方法:

Request request = Request.options()
			.setTimeout(5*1000)
			.setUrl("http://localhost:8081/test/index")
			.addParameter("name", "")
			.setRetry(3)
			.addHeader("", "")
			.build();
构建者模式相对于普通的JavaBean中的setter/getter而言,优点是明显的,就是经过builder就能建立对象,而且为属性赋值,而不用每次都经过setter方法来赋值,从而提升了程序的可读性和可扩展性。
相关文章
相关标签/搜索