美文网首页
构建者模式

构建者模式

作者: pengtoxen | 来源:发表于2019-08-08 10:50 被阅读0次

代码

package cn.test;

public class Test {
    public static void main(String[] args) {
        //不使用构建者
        Person person = new Person();
        System.out.println("设置field1之前有非常复杂的逻辑");
        person.setField1("name");
        System.out.println("设置field2之前有非常复杂的逻辑");
        person.setField2("age");
        System.out.println("设置field3之前有非常复杂的逻辑");
        person.setField3("gender");
        System.out.println(person);

        System.out.println("-------------------------------");

        //使用构建者
        Person person1 = new PersonConcrete(new Person())
                .setField1("name")
                .setField2("age")
                .setField3("gender")
                .build();
        System.out.println(person1);
    }
}

class Person {
    private String field1;
    private String field2;
    private String field3;

    public String getField1() {
        return field1;
    }

    public void setField1(String field1) {
        this.field1 = field1;
    }

    public String getField2() {
        return field2;
    }

    public void setField2(String field2) {
        this.field2 = field2;
    }

    public String getField3() {
        return field3;
    }

    public void setField3(String field3) {
        this.field3 = field3;
    }

    @Override
    public String toString() {
        return "Person{" +
                "field1='" + field1 + '\'' +
                ", field2='" + field2 + '\'' +
                ", field3='" + field3 + '\'' +
                '}';
    }
}

interface Builder {
    Builder setField1(String filed1);

    Builder setField2(String filed2);

    Builder setField3(String filed3);

    Person build();
}

class PersonConcrete implements Builder {

    private Person person;

    public PersonConcrete(Person person) {
        this.person = person;
    }

    @Override
    public Builder setField1(String filed1) {
        System.out.println("设置field1之前有非常复杂的逻辑");
        person.setField1(filed1);
        return this;
    }

    @Override
    public Builder setField2(String filed2) {
        System.out.println("设置field2之前有非常复杂的逻辑");
        person.setField2(filed2);
        return this;
    }

    @Override
    public Builder setField3(String filed3) {
        System.out.println("设置field3之前有非常复杂的逻辑");
        person.setField3(filed3);
        return this;
    }

    @Override
    public Person build() {
        return person;
    }
}

输出

设置field1之前有非常复杂的逻辑
设置field2之前有非常复杂的逻辑
设置field3之前有非常复杂的逻辑
Person{field1='name', field2='age', field3='gender'}
-------------------------------
设置field1之前有非常复杂的逻辑
设置field2之前有非常复杂的逻辑
设置field3之前有非常复杂的逻辑
Person{field1='name', field2='age', field3='gender'}

Process finished with exit code 0

总结

构建者模式将构建复杂对象的逻辑剥离开来,放在单独的实现了builder接口的concrete类里来执行,外部实例化的时候通过链式调用来获得对象.

该模式的主要优点如下:

  • 各个具体的建造者相互独立,有利于系统的扩展.
    • 例子中用PersonConcrete类来构建实例,也可以再创建新的StudentConcrete类来构建另一个指定的实例
  • 客户端不必知道产品内部组成的细节,便于控制细节风险.
    • 客户端通过链式调用,不需要内部组成的细节

其缺点如下:

  • 产品的组成部分必须相同,这限制了其使用范围
    • 上例中必须有3个属性field1,field2,field3.
  • 如果产品的内部变化复杂,该模式会增加很多的建造者类

相关文章

  • 构建者模式

    1.什么是构建者模式以及构建者模式的优点 构建者模式又称建造者模式,其主要功能是将一个复杂的对象的构建和表示进行分...

  • 07.构建者模式(创建型)

    创建型模式-构建者模式(生成器模式) 构建者模式为客户返回一个由多个部件组成的复杂产品。 一、构建者模式相关定义 ...

  • 构建者(Builder)模式

    不怕跌倒,所以飞翔 本文中知识点概述: 构建者模式的定义以及为什么要使用构建者模式; 构建者模式在Android中...

  • 安卓设计模式-构建者模式

    安卓设计模式-构建者模式 是什么 构建者模式又生builder模式,是将复杂的对象的构建与他的表示分离,使得同样的...

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

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • (八)大话设计模式 -建造者模式Builder(生成器模式)(i

    介绍 什么是构建者模式 创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创...

  • 设计模式-创建型-构建者模式

    基本概念: 构建者模式的定义将构建的过程和表示过程进行分离构建的过程:隐藏表示过程 : 开放 构建者模式的场景创建...

  • 设计模式[5]-构建者模式-Builder Pattern

    1. 构建者模式 构建者模式是创建型的设计模式,可以将复杂对象的创建过程和表示分离,使得同样的构建过程可以创建不同...

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

    设计模式--构建者设计模式 1. 概念理解 建造者模式,将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可...

  • Android常见设计模式—Builder模式

    Builder(建造者模式) 建造者模式:是将一个复杂的对象的构建与它的表示分离(同构建不同表示),使得同样的构建...

网友评论

      本文标题:构建者模式

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