最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

builder模式有哪些使用方法

来源:动视网 责编:小采 时间:2020-11-27 19:50:34
文档

builder模式有哪些使用方法

builder模式有哪些使用方法:这次给大家带来builder模式有哪些使用方法,builder模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。概述Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不
推荐度:
导读builder模式有哪些使用方法:这次给大家带来builder模式有哪些使用方法,builder模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。概述Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不


这次给大家带来builder模式有哪些使用方法,builder模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。

概述

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

使用场景

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

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

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

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

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

    重叠构造器模式

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

    / * 使用重叠构造器模式
     */
    public class Person {
     //必要参数
     private final int id;
     private final String name;
     //可选参数
     private final int age;
     private final String sex;
     private final String phone;
     private final String address;
     private final String desc;
     public Person(int id, String name) {
     this(id, name, 0);
     }
     public Person(int id, String name, int age) {
     this(id, name, age, "");
     }
     public Person(int id, String name, int age, String sex) {
     this(id, name, age, sex, "");
     }
     public Person(int id, String name, int age, String sex, String phone) {
     this(id, name, age, sex, phone, "");
     }
     public Person(int id, String name, int age, String sex, String phone, String address) {
     this(id, name, age, sex, phone, address, "");
     }
     public Person(int id, String name, int age, String sex, String phone, String address, String desc) {
     this.id = id;
     this.name = name;
     this.age = age;
     this.sex = sex;
     this.phone = phone;
     this.address = address;
     this.desc = desc;
     }
    }

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

    Person person = new Persion(1, "李四", 20, "男", "18800000000", "China", "测试使用重叠构造器模式");

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

    JavaBeans模式

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

    / * 使用JavaBeans模式
     */
    public class Person {
     //必要参数
     private int id;
     private String name;
     //可选参数
     private int age;
     private String sex;
     private String phone;
     private String address;
     private String desc;
     public void setId(int id) {
     this.id = id;
     }
     public void setName(String name) {
     this.name = name;
     }
     public void setAge(int age) {
     this.age = age;
     }
     public void setSex(String sex) {
     this.sex = sex;
     }
     public void setPhone(String phone) {
     this.phone = phone;
     }
     public void setAddress(String address) {
     this.address = address;
     }
     public void setDesc(String desc) {
     this.desc = desc;
     }

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

    Person person = new Person();
    person.setId(1);
    person.setName("李四");
    person.setAge(20);
    person.setSex("男");
    person.setPhone("18800000000");
    person.setAddress("China");
    person.setDesc("测试使用JavaBeans模式");

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

    Builder模式

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

    /**
     * 使用Builder模式
     */
    public class Person {
     //必要参数
     private final int id;
     private final String name;
     //可选参数
     private final int age;
     private final String sex;
     private final String phone;
     private final String address;
     private final String desc;
     private Person(Builder builder) {
     this.id = builder.id;
     this.name = builder.name;
     this.age = builder.age;
     this.sex = builder.sex;
     this.phone = builder.phone;
     this.address = builder.address;
     this.desc = builder.desc;
     }
     public static class Builder {
     //必要参数
     private final int id;
     private final String name;
     //可选参数
     private int age;
     private String sex;
     private String phone;
     private String address;
     private String desc;
     public Builder(int id, String name) {
     this.id = id;
     this.name = name;
     }
     public Builder age(int val) {
     this.age = val;
     return this;
     }
     public Builder sex(String val) {
     this.sex = val;
     return this;
     }
     public Builder phone(String val) {
     this.phone = val;
     return this;
     }
     public Builder address(String val) {
     this.address = val;
     return this;
     }
     public Builder desc(String val) {
     this.desc = val;
     return this;
     }
     public Person build() {
     return new Person(this);
     }
     }
    }

    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方法。

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    axios实现数据交互步骤详解

    Angular Component使用案例详解

    文档

    builder模式有哪些使用方法

    builder模式有哪些使用方法:这次给大家带来builder模式有哪些使用方法,builder模式使用的注意事项有哪些,下面就是实战案例,一起来看一下。概述Builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不
    推荐度:
    标签: 模式 有哪些 方法
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top