您的位置:首页 > 编程语言 > Java开发

浅谈Java设计模式----建造者模式

2016-09-16 20:44 330 查看

在Android中我们经常使用到对话框这个API,其中这里面使用的就是建造者设计模式,当你需要为对话框设置一些内容如标题、对话框内容、确定按取消按钮等,我们可以使用链式调用一系列方法为其设置属性。

AlertDialog dialog=new AlertDialog.Builder(this)
.setTitle()
.setMessage()
.setNegativeButton()
.setPositiveButton()
.show();


在使用某种设计模式的时候,我们应该想到在什么情况下需要使用,什么情况不需要使用。在这里举个例子:假如辅导员需要你统计班上同学的信息,第一次的时候只让你统计姓名、年龄、性别一般情况下我们会采用构造函数的方式去实现,如下代码

Person person=new Person("小明",19,"男");
System.out.println(person.toString());


Person类

public class Person {

private int age;
private String name;
private String sex;

public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}


当你刚暗暗窃喜的时候,这时候辅导员又说在把居住地址和QQ号加上,方便组建班级群。然后你就要去增加一个构造函数,再把这些值传进去。后来辅导员新需求又来了,告诉你还需要添加家长的联系方式,这时候难道又要去修改构造函数?这时候建造着模式就可以闪亮登场了!

public class Person {

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

public static class Builder {
private Person p;

public Builder() {
p = new Person();
}

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

public Builder setSex(String sex) {
p.sex = sex;
return this;
}

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

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

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

public Builder setQQ(int QQ) {
p.QQ = QQ;
return this;
}

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

public Person create() {
return p;
}
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (name != null) {
sb.append("name:" + name + ",");
}
if (age != 0) {
sb.append("age:" + age + ",");
}
if (sex != null) {
sb.append("sex:" + sex + ",");
}
if (phone != 0) {
sb.append("phone:" + phone + ",");
}
if (QQ != 0) {
sb.append("QQ:" + QQ + ",");
}
if (email != null) {
sb.append("email:" + email + ",");
}
if (address != null) {
sb.append("address:" + address);
}
return sb.toString();
}
}


具体的使用

Person p1 = new Person.Builder()
.setName("小明")
.setAge(18)
.setSex("男")
.create();
System.out.println(p1.toString());

Person p2 = new Person.Builder()
.setName("小明")
.setAge(18)
.setSex("男")
.setQQ(999999)
.setAddress("深圳市龙岗区坂田")
.create();
System.out.println(p2.toString());

Person p3 = new Person.Builder()
.setName("小明")
.setAge(18)
.setSex("男")
.setQQ(666888)
.setPhone(1383838438)
.setAddress("深圳市龙岗区坂田")
.create();
System.out.println(p3.toString());


程序运行效果



这样我们的建造设计模式就实现完了,当你再在遇上这种改需求的狂魔就可以轻松的应对了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: