Java 设计模式-建造者模式(Builder)Android讲解

由于现在从事Android方面的工作,所以觉得结合Android来讲解自己理解的设计模式会贴切一些,那就就继续结合Android来记录一下自己理解的建造者模式

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

个人不喜欢对理论做太多的描述,也可以理解为,这篇博客只是一片入门的博客,因此没有对理论作深入的讲解,快速上手,简单理解,更深的造诣看个人修行了。
对着这些定义,真的不知道该如何描述,好吧,还是从具体使用的例子看看。

Android弹框提示

上图是Android系统常常看见的一种弹框提示,这是最简单的一种,常见的还有,确定取消,按钮等等。

对于弹框提示的安卓代码,就是使用建造者模式(Builder)实现的。

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("这是一个Android的弹框提示!");
        builder.setTitle("温馨提示");
        // builder.create().show();
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
  • 将一个复杂对象的构建与它的表现分离

提示框 就是一个复杂的对象,可以有确定取消按钮,选项等其他控件, 是一个很复杂的对象,AlertDialog.Builder提示框 的构造器

        builder.setMessage("这是一个Android的弹框提示!");
        builder.setTitle("温馨提示");

使用 builder 构造提示框的提示信息(message)和标题(title)

        AlertDialog alertDialog = builder.create();
        alertDialog.show();

然而提示框的表现 alertDialog.show() 是独立于 builder 的。建造者模式使用 复杂对象 自身去调用自己的表现方式(alertDialog.show())。

  • 使得同样的构建过程可以创建不同的表示

同样使用 builder.setXX(YYY)方式构建对象,根据自身需要构建出不同表现形式的对象,例如提示框,开发者再设置一个按钮,builder.setNegativeButton(text, listener); 将会展现出不同形式的提示框。

OK,上面是对定义的简单解释,接下来通过代码进一步理解

举个例子,假设个人信息是一个很复杂的对象,包括,姓名,身高,年龄,身份信息,等等。。。

很简答直接一个类写完

package cn.design.java.builder;

/**
 * 假设person是一个复杂的对象
 * 
 * @author Ruffian
 * @date 2016年5月12日
 * 
 */
public class Person {

    private String name;
    private int age;
    private String birthday;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    // 复杂对象的表现形式
    public void show() {
        System.out.println("person info = {name:" + name + ",age:" + age
                + ",birthday:" + birthday + "}");
    }

    /**
     * Builder是复杂对象的构造器
     * 
     * @author Ruffian
     * @date 2016年5月12日
     * 
     */
    static class Builder {

        Person person = new Person();

        // 设置将要构造的属性
        public Builder setName(String name) {
            person.setName(name);
            return this;
        }

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

        public Builder setBirthday(String birthday) {
            person.setBirthday(birthday);
            return this;
        }

        // 构造一个复杂对象
        public Person build() {
            return person;
        }

    }

}

在代码中注释一样,假设Person是一个 复杂对象Builder 是复杂对象的构造器。

构造器通过调用 setXX(YYY) 方法,设置将要构造的属性,返回构造器自身,可以继续设置将要构造的属性,然后调用 build()方法,返回一个复杂对象。

复杂对象本身调用 show() 方法展示自己。

看看测试代码

package cn.design.java.builder;

public class Test {

    public static void main(String[] args) {

        // 构造器
        Person.Builder builder = new Person.Builder();
        // 设置属性
        builder.setName("Ruffian").setAge(24).setBirthday("1992-02-19");

        // 构造对象
        Person person = builder.build();
        // 对象展示
        person.show();

    }

}

结果展示

根据自身需求设置属性,假如只设置了年龄跟名字

        Person.Builder builder = new Person.Builder();
        builder.setAge(24);
        builder.setName("Ruffian");

        Person person = builder.build();
        person.show();

结果展示

OK,就这样先简单理解什么是建造者模式吧,知道在什么情形下能使用这种设计模式,至于深入的理解和拓展,只能在实际项目中去实践了。

以上是笔者对 建造者模式 的一点点理解,记录下来当做笔记使用,如有不正之处,恳请指正出来,共同进步。

源码下载

猜你喜欢

转载自blog.csdn.net/u014702653/article/details/51387541