视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Java设计中的Builder模式的介绍
2020-11-27 19:45:23 责编:小采
文档


这篇文章主要介绍了从一个Person例子进行分析重叠构造器模式、Builder模式的使用场景以及运用JavaBeans模式弥补重叠构造器模式的不足

概述

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

使用场景

  • 相同的方法,不同的执行顺序,产生不同的事件结果

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

  • 产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用

  • 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时

  • 下面从一个Person例子进行分析重叠构造器模式、JavaBeans模式、Builder模式的使用。Person类有两个必要参数(id和name),有5个可选参数(age,sex,phone,address和desc)

    重叠构造器模式

    在这种模式下,你提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,依此类推,最后一个构造器包含所有的可选参数。下面看看其编程实现:

    从上面的代码中,当你想要创建实例的时候,就利用参数列表最短的构造器,但该列表中包含了要设置的所有参数:

    重叠构造器可行,但是当有许多参数的时候,创建使用代码会很难写,并且较难以阅读

    JavaBeans模式

    采用Javabean 的写法,写一堆属性的setter方法,通过生成对象,让后调用setter方法给属性赋值。

    这种模式弥补了重叠构造器模式的不足。创建实例很容易,这样产生的代码读起来也很容易:

    JavaBeans模式因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。类无法仅仅通过检验构造器参数的有效性来保证一致性。

    Builder模式

    Builder模式既能保证像重叠构造器那样的安全,也能实现JavaBean模式那样的可读性。

    Person是不可变得,所有的默认参数值都单独放在一个地方。builder的setter方法返回builder本身,以便可以链式调用。下面是客户端使用代码:

    Person person = new Person.Builder(1, "张三")
    .age(18).sex("男").desc("测试使用builder模式").build();

    Android源码中的Builder模式

  • AlertDialog源码

  • Universal-Image-Loader图片库

  • OkHttp的Request源码

  • 优点:

  • 良好的封装性,使用建造者模式可以使客户端不比知道产品内部组成的细节

  • 建造者,容易扩展(可通过抽象———接口,抽象类)

  • 缺点:

  • 会产生多余的Builder对象以及Director对象,消耗内存

  • 总结 :Builder模式通常作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离出来,避免过多的setter方法。

    上面是我整理给大家的,希望今后会对大家有帮助。

    相关文章:

    IE8用ajax访问不能每次都刷新的问题

    IE8/IE9下Ajax缓存问题

    IE8下Ajax缓存问题及解决办法

    下载本文
    显示全文
    专题