由于现在从事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,就这样先简单理解什么是建造者模式吧,知道在什么情形下能使用这种设计模式,至于深入的理解和拓展,只能在实际项目中去实践了。

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

源码下载

更多相关文章

  1. android 通过pull解析xml文件
  2. Android怎么让toast在屏幕顶部显示
  3. Android(安卓)高亮指示层提示
  4. android CursorAdapter
  5. 一起Talk Android吧(第二百六十六回:Android中的ViewPager二)
  6. 【Android(安卓)开发】: Android客户端与服务端之间使用GSON交互
  7. Android百度地图——在地图上标注已知GPS纬度经度值的一个或一组
  8. Android(安卓)Service简单示例
  9. Android遍历SqlLite cursor对象:

随机推荐

  1. Android开发重要参考资料
  2. Android调用百度地图Web端接口,实现百度定
  3. 解决Android Studio运行编译时间久的最有
  4. 直接拿来用!十大Material Design开源项目
  5. Android Studio获取数字签名(SHA1)的方法
  6. Android Volley:使用方法总结及实例解析
  7. Android之用Handler实现主线程和子线程互
  8. Android 歌词Lrc显示 自定义View
  9. Android 事件输入系统整体框架
  10. Android图片缓存处理