1.建造者模式是一步一步创建一个复杂对象的创建模式。该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件表示隔离开。

2.Bulider模式的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象。

3.Builder的使用场景:

<1>相同的方法,不同的执行顺序,产生不同的事件结果。

<2>多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。

 <3> 产品类非常复杂,或产品类中的调用顺序不同产生了不同的作用。

<4>初始化一个对象特别复杂,如参数很多,且很多参数具有默认值时。

4.Builder模式的代码示例:

/**
* Builder 建造者模式
*/
public class Person {
private String name;
private String sex;
private int age; /**
* 构造方法,传入builder对象
* @param builder 对象
*/
public Person(Builder builder) {
this.name = builder.name;
this.sex = builder.sex;
this.age = builder.age;
} /**
*
* get set 方法
*/
public String getName() {
return name;
} public String getSex() {
return sex;
} public int getAge() {
return age;
} public void setName(String name) {
this.name = name;
} public void setSex(String sex) {
this.sex = sex;
} public void setAge(int age) {
this.age = age;
} /**
*
* 静态内部类 Builder类 包含所有Person属性。
*/
public static class Builder{
private String name;
private String sex;
private int age; public Builder name(String name){
this.name=name;
return this;
}
public Builder sex(String sex){
this.sex=sex;
return this;
}
public Builder age(int age){
this.age=age;
return this;
} public Person builder(){
return new Person(this); }
} }

通过Builder,可以创建不同参数的Person对象

        Person.Builder builder=new Person.Builder();
Person person0=builder.name("张三").builder();
Person person1=builder.name("张三").sex("男").builder();
Person person2=builder.name("张三").sex("男").age(20).builder();

5.在Android中我们常见的Builder模式是Alertdialog。Alertdialog的源码如下:

待续…………

最新文章

  1. 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数
  2. Terra Vista 6.2
  3. Inventory of the materials to teach you how to query a date certain combination of dimensions
  4. ptmalloc2源码解析初探
  5. iOS日常工作之常用宏定义大全
  6. Machine Learning – 第2周(Linear Regression with Multiple Variables、Octave/Matlab Tutorial)
  7. linux下tomcat服务的启动、关闭与错误跟踪
  8. 权限管理之基于ACL的实现:自定义JSTL函数实现即时认证
  9. 相对路径与绝对路径构造file对象
  10. GNOME界面简单使用
  11. 学习一之UML类图
  12. A Boring Problem UVALive - 7676 (二项式定理+前缀和)
  13. TCP粘包问题
  14. [leetcode]20. Valid Parentheses有效括号序列
  15. Unity3D的主要类图 N年前的版本
  16. ThreadLocal变量
  17. python pstats ,profile 性能分析
  18. C#通过XElement写入XML文件
  19. 2018.09.14 bzoj2982: combination(Lucas定理)
  20. Chapter 3 Phenomenon——4

热门文章

  1. Ubuntu14.04引导菜单修复
  2. 杭电 1021 Fibonacci Again
  3. 在maven项目结构下对于Resources目录下文件的存取
  4. C语言break/continue/exit/return的功能区别
  5. 学习笔记——ST表
  6. 使用python脚本定时备份web网站
  7. 谈谈python里面关于任务队列
  8. linux 遇到(vsftpd)—500 OOPS:chroot
  9. UID和GID(详细说明)
  10. Jenkins学习总结(6)——了解DevOps的前世今生