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

一、多个构造器的缺点

我们有时候可能会遇到编写大量构造器的方法

<span style="font-size:18px;">public class Person {
	private final String name;
	private final String sex;
	private final int age;
	private final int weight;
	
	public Person(String name){
		this(name,"男");
	}
	
	public Person(String name,String sex){
		this(name,sex,12);
	}
	
	public Person(String name,String sex,int age){
		this(name,sex,age,120);
	}
	
	public Person(String name,String sex,int age,int weight){
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.weight = weight;
	}
}
</span>
缺点:但是当构造方法更多的时候,往往令我们需要些大量的代码。并且编写出的代码很难令人理解。

二、采取新方法:JavaBean。javaBean的优点和缺点

什么叫做javaBean:

方法中只有set()和get()用来获取和修改成员变量的类

示例:

public class Person {
	private String name;
	private String sex;
	private int age;
	private int weight;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}

}

优点:良好的阅读性

Person person = new Person();

person.setName("name");

person.setSex("男");

person.setAge(18);

缺点:多线程的情况下无法保证成员变量的一致性。需要精力去保证线程安全。

三、采取第二种方法:Builder方法 Builder方法的优缺点

什么叫做Builder:比如说你是老板,Builder就是你的秘书。你的下属要将东西提交给你,必须先提交给你的秘书,你的秘书,先整理下属传递过来的文件(哪些,有哪些没有),然后再审核(哪些数据是正确的,哪些数据是错误的)

最后,再将文件传递给你。

使用情形:1、大量可选择填写的成员变量 

示例:

public class Person {
	//第一步:创建你需要的文件的声明,final 表示文件只能被提交一次,不能修改的
	private final String name;
	private final String sex;
	private final int age;
	private final int weight;
	
	//第四步:创建接收秘书文件的构造方法(私有的),文件必须是由秘书传递来的。
	private Person(Builder builder){
		this.name = builder.name;
		this.sex = builder.sex;
		this.age = builder.age;
		this.weight = builder.weight;
	}
	
	//第二步:创建Builder,你的秘书
	public static class Builder{
		//最重要的文件,必须上交
		private final String name;
		//下面都不是中要的文件,可填可不填(一般都提供一个默认值)
		private String sex;
		private int age;
		private int weight;
		
		//必须上交的文件,要放在构造方法中
		public Builder(String name){
			this.name = name;
		}
		
		//创建上交数据的方法,记住上交完之后,秘书是还在的(返回秘书本身)
		public Builder setSex(String sex) {
			this.sex = sex;
			return this;
		}
		public Builder setAge(int age) {
			this.age = age;
			return this;
		}
		public Builder setWeight(int weight) {
			this.weight = weight;
			return this;
		}
		
		//第五步:秘书检查完成之后,将文件提交给老板
		public Person build(){
			return new Person(this);
		}
	}
	
}
使用:

	public static void main(String[]args){
		Person person = new Person.Builder("gogo")
		.setAge(10)
		.setSex("男")
		.setWeight(120)
		.build();
	}
优点:保持良好的阅读性。又有良好的安全性、并且可以在Builder接收参数的时候判断参数是否正确。

缺点:代码量比较大



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值