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

十一、构建者模式

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

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

   

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方法来赋值,从而提高了程序的可读性和可扩展性。

转载于:https://my.oschina.net/u/2323379/blog/880738

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值