美文网首页
建造者(Builder)模式

建造者(Builder)模式

作者: 西敏寺钟声 | 来源:发表于2020-08-06 08:51 被阅读0次

建造者模式适用于对象属性太多的情况

有一个属性非常多的类:Person

public class Person {
    
    private String a;
    private String b;
    private String c;
    private String d;
    private String e;
    private String f;
    private String g;
    private String h;
    private String i;
    private String j;
    
    // get/set 方法
    
    // 构造方法1
    // 构造方法2
    // 构造方法3
    // 构造方法4
    // 构造方法5
    // 构造方法6
    
}

Person类的属性非常多,我们在创建不同属性的Person的时候,需要写很多的构造方法来应对不同的场景,这样代码非常臃肿,解决方法有两个,一个是采用BeanSet方式,一个就是使用Build模式。

BeanSet方式

public class Person {
    
    private String a;
    private String b;
    private String c;
    private String d;
    private String e;
    private String f;
    private String g;
    private String h;
    private String i;
    private String j;
    
    public void setA(String a) {
        this.a = a;
    }
    
    // ......
    
}

这种BeanSet方式是常用的方式,现在插件行业很发达,大名鼎鼎的Lombok自动为我们生成了get和set方法,这样省去了我们写get和set方法的时间,代码显得很干净,但是,在我们创建对象的时候,不得不这样:

    public static void main(String[] args) {
        Person person = new Person();
        person.setA("");
        person.setB("");
        person.setC("");
        person.setD("");
        person.setE("");
        person.setF("");
        person.setG("");
        person.setH("");
        person.setI("");
        person.setJ("");
    }

这样写没毛病,但总感觉差那么一点啊。

Builder模式

标准写法

  1. 抽象建造者,一般是一个接口,包含创建产品对象的方法
  2. 导演者,调用具体建造者,创建产品对象
  3. 具体建造者
  4. 生成产品对象

这种写法优点繁琐,日常工作中基本很少用到。

一般写法

一般写法省去了抽象建造者导演者,采用静态内部类的方式来创建建造者

public class User {

    private String name;

    private Integer age;

    private String gender;

    private String mobile;

    private String idCard;

    private String address;

    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.gender = builder.gender;
        this.mobile = builder.mobile;
        this.idCard = builder.idCard;
        this.address = builder.address;
    }

    public static class Builder {

        /**require**/
        private final String name;

        private final Integer age;

        /**optional**/
        private String gender;

        private String mobile;

        private String idCard;

        private String address;

        public Builder(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public Builder gender(String gender) {
            this.gender = gender;
            return this;
        }

        public Builder mobile(String mobile) {
            this.mobile = mobile;
            return this;
        }

        public Builder idCard(String idCard) {
            this.idCard = idCard;
            return this;
        }

        public Builder address(String address) {
            this.address = address;
            return this;
        }

        public User build() {
            return new User(this);
        }

    }

}

使用方式

public static void main(String[] args) {
        User use = new Builder("zhangsan", 12).address("beijing").build();
}

相关文章

  • 设计模式(四):建造者模式

    建造者模式(Builder Pattern) 建造者模式(Builder Pattern)将一个复杂的构建与其表示...

  • 建造者模式

    建造者模式 创建型模式 Director、Builder、Product建造模型 Builder负责构建Produ...

  • 设计模式之建造者模式

    建造者模式的定义   建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:  Separat...

  • Builder pattern

    Builder pattern 这里所介绍的建造者模式不是GOF中介绍的建造者模式。GOF中的建造者模式主要用于抽...

  • 建造者模式

    建造者模式的定义 建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate th...

  • 设计模式--建造者模式

    目录 本文的结构如下: 引言 什么是建造者模式 模式的结构 典型代码 代码示例 Builder模式变种 建造者模式...

  • Android 中的建造者模式

    Android 中的建造者模式 概述 建造者模式(Builder Pattern)也叫生成器模式,其定义如下:se...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

  • 建造者模式-Builder(建造者)

    前言 在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是...

  • 五 建造者模式

    本文主要介绍创建型模式的最后一种————建造者模式。 概念 建造者模式(英:Builder Pattern)是一种...

网友评论

      本文标题:建造者(Builder)模式

      本文链接:https://www.haomeiwen.com/subject/flaarktx.html