Java Builder模式(设计模式之Builder模式)

1.设计模式之终极结合

昨天项目上线(今年是没有新需求了,那提前祝大家新年快乐),上班继续最近几期博客的编写。承接上一篇博客观察者模式,这一期我们一起来了解一下Builder模式。我们最近几期博客打算主要讲一下单例模式、观察者模式、Build模式,目的是为了方便后期为大家带来RXJava+Retrofit2.0+Okhttp3结合使用的网络请求框架。

思考了一上午,我该怎么写出Builder模式的精华呢?(如果你们有一定要告诉我)

2.Builder模式定义

 简单说就是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 

3.Builder模式理解

 看了定义觉得难以理解,那么说说我的理解。比如说你需要构造一个机器:是不是会包含很多部件,但是根据相同的制造过程可以制作出不同的机器(机器猫,机器狗,机器人,机器*等等)。再比如说相同的注册流程可以注册出不同的公司(百度,华为,小米等等),不同的注册信息可以表示出不同的公司。

然后我们再说说为什么要用Builder模式吧,比如你做个机器人,我们是不是要用很多参数(手,脚,关节,眼睛,嘴巴,鼻子等等)来构造,如果你用一般的构造方法,你觉得你要写多少个构造方法呢?显得特别麻烦,代码还不清晰,传参也麻烦;这样我们就引入了Builder模式。

4.Builder模式简单示例

步骤一:创建一个实体类CompanyClient,里面有个和实体类(只能获取变量值)相同变量的静态内部类Builder(设置变量值) 。在实体类通过构造函数来构造一个Builder,通过调用build()来建造一个具体的实体对象。


/**
 * 实体类 包含一个静态内部类 Builder
 */
public class CompanyClient {
   public final String companyName;
   public final String companyAddress;

   public final double companyRegfunds;
   public final String mPerson;
   public final String mType;

	
	//构造方法 
    public CompanyClient() {
        this(new Builder());
    }
	
	//构造方法
	public CompanyClient(Builder builder){
        this.companyName = builder.companyName;
        this.companyAddress = builder.companyAddress;
        this.companyRegfunds = builder.companyRegfunds;
        this.mPerson = builder.person;
        this.mType = builder.type;
    }
    public String getCompanyName() {
        return companyName;
    }

    public String getCompanyAddress() {
        return companyAddress;
    }

    public double getCompanyRegfunds() {
        return companyRegfunds;
    }

    public String getmPerson() {
        return mPerson;
    }

    public String getmType() {
        return mType;
    }
	
   
	
    public Builder newBuilder() {
        return new Builder(this);
    }

    @Override
    public String toString() {
        return "CompanyClient{" +
                "companyName='" + companyName + '\'' +
                ", companyAddress='" + companyAddress + '\'' +
                ", companyRegfunds=" + companyRegfunds +"千万"+
                ", mPerson=" + mPerson +
                ", mType='" + mType + '\'' +
                '}';
    }
	/**
	*静态内部类 Builder
	*/
	
    public static class Builder{
       public String companyName;
       public String companyAddress;
       public  double companyRegfunds;
       public  String person;
       public String type;
	   //构造方法
       public Builder() {
           companyName = companyName;
           companyAddress = companyAddress;
           companyRegfunds = companyRegfunds;
           person = person;
           type = type;

       }
	   //构造方法
       Builder(CompanyClient companyClient){
           this.companyName = companyClient.companyName;
           this.companyAddress = companyClient.companyAddress;
           this.companyRegfunds = companyClient.companyRegfunds;
           this.person = companyClient.mPerson;
           this.type = companyClient.mType;
       }

       public Builder setCompanyName(String name) {
           companyName = name;
           return this;
       }

       public Builder setCompanyAddress(String address) {
           companyAddress = address;
           return this;
       }

       public Builder setCompanyRegfunds(double regfunds) {
           companyRegfunds = regfunds;
           return this;
       }

       public Builder setmPerson(String per) {
           person = per;
           return this;
       }

       public Builder setmType(String typeStr) {
           type = typeStr;
           return this;
       }
		//构建一个实体
        public CompanyClient build() {
            return new CompanyClient(this);
        }
   }
}
  • 30
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值