设计模式 - 构建者模式

构建者模式作用:可以根据客户需要,去帮我们创建指定的对象。
创建对象方式1:
       Student stu = new Student(1,"zhangsan");
       第一种方式创建的对象:比较死板,只能根据构造方法的参数去设置创建对象
       比如说Student的构造参数有10个,这10个参数都是配置到配置文件中的,而且都不是必须项(可能配置文件只配置几项)
       我想获取几个参数,就根据这几个参数去创建我们的对象。
创建对象方式2:
       Student stu = new Student();
       stu.setId(1);
       stu.setName("zhangsan");
       使用第二种方式去创建对象,需要等待初始化完成才能正常使用。
        
构建者模式的角色:
        导演类
        构建者
        产品
 效果:
            StudentBUilder.id(1).name("lisi").age(20).build();-----这就是构建者模式的玩法


代码示例

package com.wang.b_builder;
public class StudentBuilderDemo {
	public static void main(String[] args) {
		// 第一种方式创建对象:比较死板,只能根据构造方法的参数去设置创建对象
		Student student = new Student("1", "wangchao", 33);
		// 第二种方式创建对象: 创建对象后,需要等待初始化完成才能正常使用。
		Student2 student2 = new Student2();
		student2.setId("1");
		student2.setName("wangchao");
		student2.setAge(33);
		
		// 构建者模式1
		Student3 student3 = new StudentBuilder().id("1").name("wangchao").age(33).build();
		// 构建者模式2
		Student4.Builder builder = new Student4.Builder().id("1").name("wangchao").age(33);
		Student4 student4 = builder.build();
		student4 = new Student4.Builder().id("1").name("wangchao").age(33).build();
	}
}

第一种方式创建对象:根据构造方法的参数去设置创建对象

package com.wang.b_builder;
public class Student {
	private String id;
	private String name;
	private int age;
	public Student(String id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}
}

第二种方式创建对象: 创建对象后,需要等待初始化完成才能正常使用

Student2 student2 = new Student2();
student2.setId("1");
student2.setName("wangchao");
student2.setAge(33);

package com.wang.b_builder;
public class Student2 {
	private String id;
	private String name;
	private int age;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

构建者模式1

Student3 student3 = new StudentBuilder().id("1").name("wangchao").age(33).build();

package com.wang.b_builder;
public class StudentBuilder {
	private Student3 student = new Student3();
	public StudentBuilder id(String id) {
		student.setId(id);
		return this;
	}
	public StudentBuilder name(String name) {
		student.setName(name);
		return this;
	}
	public StudentBuilder age(int age) {
		student.setAge(age);
		return this;
	}
	public Student3 build() {
		return student;
	}
}


package com.wang.b_builder;
public class Student3 {
	private String id;
	private String name;
	private int age;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

构建者模式2

Student4.Builder builder = new Student4.Builder().id("1").name("wangchao").age(33);
Student4 student4 = builder.build();
student4 = new Student4.Builder().id("1").name("wangchao").age(33).build();

package com.wang.b_builder;
public class Student4 {
	private String id;
	private String name;
	private int age;
	public static class Builder {
		private Student4 student = new Student4();
		public Builder id(String id) {
			student.id = id;
			return this;
		}
		public Builder name(String name) {
			student.name = name;
			return this;
		}
		public Builder age(int age) {
			student.age = age;
			return this;
		}
		public Student4 build() {
			return student;
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空@脚踏实地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值