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

来源:互联网 发布:mac 更新java版本 编辑:程序博客网 时间:2024/05/19 02:20

在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());

程序运行效果

这里写图片描述

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

4 0
原创粉丝点击