设计模式- 建造者模式

  这个模式,我不大用,但今天还是记录一下,在创建Dialog时我是使用到,但不知其所然,只是按规则写。

AlertDialog.Builder builder=new AlertDialog.Builder(this);
AlertDialog dialog=builder.setTitle("标题")
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setView(R.layout.myview)
        .setPositiveButton(R.string.positive, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        })
        .setNegativeButton(R.string.negative, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        })
        .create();
dialog.show();

以上就是用到了策略模式,他不是写个普通的构造函数直接创建对象,而是用builder来一步一步添加,好处可能是再创建时赋值比较清晰。

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

优点:

        类有多个构造函数,能提更多的客户调用选择
缺点:
       1、 类的作者不得不书写多种参数组合的构造函数,而且其中还需要设置默认参数值,这是一个需要细心而又枯燥的工作。
       2、其次,这样的构造函数灵活性也不高,而且在调用时你不得不提供一些没有意义的参数值,


demo:

public class Person {
	private String name;
	private String age;
	private String height;
	private String weight;
	private String address;

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

	private Person(Builder builder) {
		this.name = builder.name;
		this.age = builder.age;
		this.height = builder.height;
		this.address = builder.address;
		this.weight = builder.weight;
	}

	static class Builder {
		private String name;
		private String age;
		private String height;
		private String weight;
		private String address;

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

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

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

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

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

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

	}

	public String getName() {
		return name;
	}

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

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getHeight() {
		return height;
	}

	public void setHeight(String height) {
		this.height = height;
	}

	public String getWeight() {
		return weight;
	}

	public void setWeight(String weight) {
		this.weight = weight;
	}

	public String getAddress() {
		return address;
	}

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

	public static void main(String[] args) {
		Person.Builder builder = new Person.Builder();
		Person person = builder.name("hq").age("23").height("161").weight("50kg").address("nj").build();
		System.out.println(person.toString());
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值