由于现在从事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,就这样先简单理解什么是建造者模式吧,知道在什么情形下能使用这种设计模式,至于深入的理解和拓展,只能在实际项目中去实践了。
以上是笔者对 建造者模式 的一点点理解,记录下来当做笔记使用,如有不正之处,恳请指正出来,共同进步。