第二条:遇到多个构造器参数时要考虑用构建器

package com.stu;

 
/*
 * 
 *  对于实体对象中, 参数很多的时候, 创建对象, 
 *  
 *    方法A.  通过编写多个构造器,调用的时候,看选择调用构造器叠代的形式,构造器里面
 *            再去调用构造器的形式来进行。 
 *            
 *    方法B:    javaBean的形式来处理,但是参数多的话,代码行数会增加,都是set/get这样 
 *            同时在多线程异步执行的时候导致奇怪的错误。
 *    
 *    
 *    构建器的形式创建对象, 对于对象参数比较多的时候, 创建对象形式,可读性和代码性都强,同时最后是通过无参的构造器来返回
 *    对象。 同时构造器直接私有化。 (对于框架的基类这个还是不要私有化)
 *    
 *    同时如果,我们再框架使用的时候, 可以加入泛型的形式, 通过   Student<T extends BaseClass>,抽象一个类出来也是可以的。
 *    
 * 
 * **/
public class Student {

	// 必选
	private  String  name;
    private  String  className;
	
    
	// 选参
	private  String  address;
	private  int   age;
	private  String  hobby; 
	
	
	public static class Builder implements IBuilder<Student>{
		
		// 必选
		private  String  name;
	    private  String  className;
		 
		// 选参
		private   String  address;
		private   int   age;
		private   String  hobby; 
		
		public Builder(String name,String className){			
			this.name = name;
			this.className = className;
		}
		
		public Builder  setAddress(String address){
			this.address = address;
			return this;
		}
		
		
		public Builder setAge(int age){
			this.age = age;
			return this;
		}
		
		public Builder setHobby(String hobby){
			this.hobby = hobby; 
			return this;
		}

		@Override
		public Student builder() {
			 
		   return new Student(this);
			 
		}
		 
	}
	
	// 直接构造器私有化了。
	private Student(Builder builder){
		name = builder.name;
		className = builder.className;
		address = builder.address;
		age = builder.age;
		hobby = builder.hobby;
	}
	
}

public class Main {

	 
	public static void main(String[] args) {
		 
	    Student stu = new Student.Builder("小强", "三年二班").setAge(18).builder();

	    System.out.println(stu);
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值