Builder模式在Java,Android中的应用

本文介绍Builder模式的概念及其在解决多参数构造函数问题上的应用。通过一个具体的例子展示了如何使用Builder模式来简化对象创建过程,提高代码的可读性和灵活性。

惯例:先上图后说话,谢谢各位伙伴的支持! 有你们是我的福分!

每日一言:积极者相信只有推动自己才能推动世界,只要推动自己就能推动世界!

在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。

我们常常会面临编写一个这样的实现类(假设类名叫DoDoContact),这个类拥有多个构造函数,


DoDoContact(String name);

DoDoContact(String name, int age);

DoDoContact(String name, int age, String address);

DoDoContact(String name, int age, String address, int cardID);


这样一系列的构造函数主要目的就是为了提供更多的客户调用选择,以处理不同的构造请求。这种方法很常见,也很有效力,但是它的缺点也很多。类的作者不得不书写多种参数组合的构造函数,而且其中还需要设置默认参数值,这是一个需要细心而又枯燥的工作。其次,这样的构造函数灵活性也不高,而且在调用时你不得不提供一些没有意义的参数值,例如,DoDoContact("Ace", -1, "SH"),显然年龄为负数没有意义,但是你又不的不这样做,得以符合Java的规范。如果这样的代码发布后,后面的维护者就会很头痛,因为他根本不知道这个-1是什么含义。对于这样的情况,就非常适合使用Builder模式。Builder模式的要点就是通过一个代理来完成对象的构建过程。这个代理职责就是完成构建的各个步骤,同时它也是易扩展的。下面是改写自Effective Java里面的一段代码:


public class JavaBuilderTest {
    public static void main(String[] args) {
        DoDoContact ddc=new DoDoContact.Builder("Ace").age(10).adress("shanxi").build();
        System.out.println("name="+ddc.getName()+",age="+ddc.getAge()+",adress="+ddc.getAdress());

    }
}



public class DoDoContact {
	private int age;
	private int safeID;
	private String name;
	private String adress;
	public int getAge() {
		return age;
	}
	public int getSafeID() {
		return safeID;
	}
	public String getName() {
		return name;
	}
	public String getAdress() {
		return adress;
	}
	public static class Builder {
		private int age = 0;
		private int safeID = 0;
		private String name = null;
		private String adress = null;

		// 构建步骤
		public Builder(String name) {
			this.name = name;
		}

		public Builder age(int age) {
			this.age = age;
			return this;
		}
		public Builder sageID(int sageID) {
			this.safeID = safeID;
			return this;
		}
		public Builder adress(String adress) {
			this.adress = adress;
			return this;
		}
		public DoDoContact build() {
			return new DoDoContact(this);
		}
	}
	private DoDoContact(Builder b) {
		age = b.age;
		safeID = b.safeID;
		name = b.name;
		adress = b.adress;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄毛火烧雪下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值