设计模式——建造者模式2(创建型模式)

我们接着上一篇讲解的设计者模式,本篇将重点讲解一下另外一种建造者模式,其实在安卓开发中经常用到,比如AlertDialog的创建,设置标题等等

假如我们现在要创建一个对象,这个对象有下面几个属性,name,id,age,address,如果按照我们传统的对象要么会写多个构造方法,如下,这样创建起来不仅代码臃肿,而且不容易维护,看起来头大

 

        private String name;
	private String id;
	private int age;
	private String address;

	public MyUser(String name) {
		super();
		this.name = name;
	}

	public MyUser(String name, String id) {
		super();
		this.name = name;
		this.id = id;
	}

	public MyUser(String name, String id, int age) {
		super();
		this.name = name;
		this.id = id;
		this.age = age;
	}

	public MyUser(String name, String id, int age, String address) {
		super();
		this.name = name;
		this.id = id;
		this.age = age;
		this.address = address;
	}

或者使用get set方法进行赋值,这样也有同样的问题

 

 

	private String name;
	private String id;
	private int age;
	private String address;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

那么我们有没有好的方法来解决这个问题呢,答案当然是有的,就使用构建者模式,下面直接贴上代码,看起来很好理解

 

 

public class MyUser {
	private final String name;
	private final String id;
	private final int age;
	private final String address;

	public MyUser(MyUserBuilder builder) {
		super();
		this.name = builder.name;
		this.id = builder.id;
		this.age = builder.age;
		this.address = builder.address;
	}

	public String getName() {
		return name;
	}

	public String getId() {
		return id;
	}

	public int getAge() {
		return age;
	}

	public String getAddress() {
		return address;
	}

	public static class MyUserBuilder {
		private String name;
		private String id;
		private int age;
		private String address;

		public MyUserBuilder name(String name) {
			this.name = name;
			return this;
		}
		public MyUserBuilder id(String id) {
			this.id = id;
			return this;
		}
		public MyUserBuilder age(int age) {
			this.age = age;
			return this;
		}

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

		public MyUser build() {
			return new MyUser(this);
		}
	}

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

测试类

 

 

public class MyUserBuilder {
	public static void main(String[] args) {
		
		MyUser.MyUserBuilder builder = new MyUser.MyUserBuilder();
		
		builder.name("张三")
		.age(10)
		.id("01")
		.address("河南")
		.build();
		System.out.println(builder.build().toString());
	}
}

运行结果

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值