Builder – это один из шаблонов проектирования класса criacionais библия Банды из Рамки . Этот стандарт позволяет строить сложные объекты, шаг за шагом, и побочным эффектом этого является строительство владеет объектов.
var pessoa = Pessoa.builder().nome("João").sobrenome("das Couve").idade(36).build();
Таким образом, мы видим, использование builder и его популяризацией гораздо больше, подключенного к замене строитель с много параметров, дизайна, более свободно, чем фактический намерение GoF :
“…разделение построение сложного объекта от его представления, так что процесс строительства можно создавать различные представления.”
Para differenciar esa inteção do builder padrão, é comum chama-lo de Fluent Interface Builder .
Pattern доступен в Ide, чтобы быть самостоятельно создан и стал еще более известным в мире Java через Проект Lombok , который снял большой boilerplate и превратили в простые аннотации.
Это строитель, как правило, имеет следующую картину:
package builder; public class Pessoa { private final String nome; private final String sobrenome; private final int idade; public Pessoa(String nome, String sobrenome, int idade) { this.nome = nome; this.sobrenome = sobrenome; this.idade = idade; } public static PessoaBuilder builder() { return new PessoaBuilder(); } // Getters and setters public static class PessoaBuilder { private String nome; private String sobrenome; private int idade; public PessoaBuilder nome(String nome) { this.nome = nome; return this; } public PessoaBuilder sobrenome(String sobrenome) { this.sobrenome = sobrenome; return this; } public PessoaBuilder idade(int idade) { this.idade = idade; return this; } public Pessoa build() { return new Pessoa(nome, sobrenome, idade); } } }
Но меня всегда беспокоило, что builder, обладая слишком много шагов, которые могли бы внести свой вклад, что разработчик невнимательным call build() преждевременно, то есть, объект, все еще не закончена. Это было только понял, во время выполнения исключение, или, того хуже, с неудачной попыткой доступа к той собственности, забыли.
Когда у нас есть конструктор, мы можем требовать, чтобы определенные поля были конца и это требует от разработчика, заполнить те параметры, но с builder по умолчанию, это не возможно.
Esse incômodo, felizmente, acabou quando a che io artigo brilhante Простая Реализация Fluent Builder – Безопасная Альтернатива Традиционному Builder от Сергея Евтушенко.
Этот гений решил проблему и по-прежнему чрезвычайно стильно!
package builder; public class Pessoa { private final String nome; private final String sobrenome; private final int idade; public Pessoa(String nome, String sobrenome, int idade) { this.nome = nome; this.sobrenome = sobrenome; this.idade = idade; } public static PessoaBuilder.Stage0 builder() { return nome -> sobrenome -> idade -> () -> new Pessoa(nome, sobrenome, idade); } private interface PessoaBuilder { interface Stage0 { Stage1 nome(String nome); } interface Stage1 { Stage2 sobrenome(String sobrenome); } interface Stage2 { Stage3 idade(int idade); } interface Stage3 { Pessoa build(); } } }
Здесь мы определили, обязательной, параметры и порядок, в котором они должны быть заполнены. Наш builder построен действия, представлены функциональные интерфейсы. Для удобства вставить эти действия внутри интерфейса, что ведет себя здесь, как namespace .
- Метод builder возвращает первый этап, класс, который имеет только метод имя;
- Это возвращает класс, который имеет также единственный способ, который, фамилия;
- Фамилия возвращает Stage3 метод build(),
- Build создает объект person.
Завершение
Конфигуратор по умолчанию отлично, когда вы хотите дать разработчику гибкость заполнения параметров, что считает необходимым, сохраняя значения по умолчанию для тех, кто не заполнить. Для ситуации, в которой некоторые параметры не являются обязательными, решение, представленное альтернатива довольно худой и элегантный.
Характеристика
- Builder
- Шаблоны Проектов: Универсальные решения для Обеспечения объектно-Ориентированные
- Ломбок – Строитель
- Простая реализация Fluent Builder безопасная альтернатива традиционному builder
- Сергей Евтушенко
Оригинал: “https://dev.to/leandrostl/builder-seguro-e-elegante-cfi”