Java设计模式:构造者(Builder)模式

一、为什么要用Builder模式

Builder模式是为了弥补Java语言设计上的不足,话不多说,下面我们一起来看个栗子就知道啦!

public class User{

    String name;
    int age;
    String email;
    String address;

    public User(){
    }
    
    //想要有名字和邮箱的构造器
    public User(String name, String email){
        this.name = name;
        this.email = email;
    }

    //想要有名字和地址的构造器
    public User(String name, String address){
        this.name = name;
        this.address = address;
    }
}

在上面代码中,很容易可以发现,在我们正常的需求下,Java构造器的编写将会出问题,由于参数个数和类型一样无法构成重载,所以这样写是不行的,那么Builder模式就是为了解决这种情况而出现的。

二、Builder模式的实现

下面我们一起来看一下Builder模式如何编写的:

public class User {

	String name;
	int age;
	String phone;
	String email;
	String address;

    //注意无参构造器私有,避免外界使用构造器创建User对象
	private User() {
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", age=" + age + ", phone=" + phone + ",                 
                email=" + email + ", address=" + address
				+ "]";
	}

	public static class Builder {

		private String name;
		private int age;
		private String phone;
		private String email;
		private String address;

		public Builder() {
		}
		
		public Builder setName(String name) {
			this.name = name;
			return this;
		}

		public Builder setAge(int age) {
			this.age = age;
			return this;
		}

		public Builder setPhone(String phone) {
			this.phone = phone;
			return this;
		}

		public Builder setEmail(String email) {
			this.email = email;
			return this;
		}

		public Builder setAddress(String address) {
			this.address = address;
			return this;
		}

		public User build() {
			User user = new User();
			user.name = name;
			user.age = age;
			user.email = email;
			user.phone = phone;
			user.address = address;
			return user;
		}
	}
}

根据上面的代码,我们可以看出来,就是在User内部创建一个内部类,并且拥有和User一样的字段(属性),并且提供SET方法,最重要的是要提供一个能够返回User对象的方法(build),这样才能通过Builder来创建User对象。

Builder设计模式还有一个好处,那便是我们可以随意组合输入的参数,不仅避免了重载出错的问题,还不需要写过多的构造器。

下面我们一起看看写完Builder模式类之后如何来调用:

public class UserTest {
	
	public static void main(String[] args) {
		User u = new User.Builder().setName("bob").setAge(22).build();
		System.out.println(u);
	}
	
}

不难发现,我们是new一个User下的Builder类的对象,并且设置各种参数之后调用返回User对象的方法,最终实现User方法的创建。这就是Java的Builder设计模式,是不是很简单?快点get起来吧!!

 

 

本博客是本人学习Java的心得笔记,转载请说明,若出现错误,请在评论中指出,不胜感激!!

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java构造设计模式是一种创建型设计模式,它允许我们使用相同的构造过程来构建不同的对象。这种模式通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。[1] 在Java中,构造模式通常由一个Builder类和一个Director类组成。Builder类负责定义创建对象的各个部分的方法,而Director类负责使用Builder类来构建对象。 具体来说,Builder类中会定义一系列方法,用于设置对象的各个属性。这些方法可以根据需要进行链式调用,以便按照特定的顺序设置对象的属性。最后,Builder类会定义一个build方法,用于返回构建好的对象。 Director类负责控制构建过程的顺序,并将Builder类与具体的构建过程解耦。Director类可以根据需要调用Builder类中的方法来设置对象的属性,并最终调用build方法获取构建好的对象。 通过使用构造设计模式,在创建对象的过程中可以更加灵活地设置对象的属性,而无需暴露对象的构造细节。这样可以使得代码更加模块化、可扩展和易于维护。因此,构造设计模式Java中被广泛应用于创建复杂对象。<span class="em">1</span> #### 引用[.reference_title] - *1* [Java运用设计模式中的建造者模式构建项目的实例解析](https://download.csdn.net/download/weixin_38557727/12798185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值