首页 > 程序开发 > 软件开发 > Java >

java23种设计模式十一

2017-07-08

java23种设计模式十一。构建者模式主要是用于创建复杂的一些对象,这些对象的创建步骤基本固定,但是可能具体的对象的组成部分却又可以自由的变化,比如房子装修,我可以在卧室里放电视,也可以不放电视,我还可以摆个电脑,这些属性可以自由变化。

十一、构建者模式

java23种设计模式十一。构建者模式主要是用于创建复杂的一些对象,这些对象的创建步骤基本固定,但是可能具体的对象的组成部分却又可以自由的变化,比如房子装修,我可以在卧室里放电视,也可以不放电视,我还可以摆个电脑,这些属性可以自由变化。

要构建这样一个对象,就需要一个创建一个Builder,用于构建需要的对象。

import java.util.HashMap;
import java.util.Map;

/**
 * 专门用于Http请求的类
 * 设置请求参数,请求头
 * 支持重试,默认重试3次
 * @author Lynn
 *
 */
public final class Request {

	//专门用于存储请求参数
	private Map params = new HashMap();
	
	//专门用于存储请求头
	private Map headers = new HashMap();
	
	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 params = new HashMap();
		
		//专门用于存储请求头
		private Map headers = new HashMap();
		
		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 getParameters(){
		return this.params;
	}
	
	/**
	 * 获得所有请求头
	 */
	public Map 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方法来赋值,从而提高了程序的可读性和可扩展性。
相关文章
最新文章
热点推荐