JavaRush/Java блог/Random/Паттерн (Шаблон) Builder

Паттерн (Шаблон) Builder

Статья из группы Random
участников
Этот шаблон рекомендуется использовать, когда класс имеет большое количество однотипных параметров и трудно запомнить их порядок и назначение.
Паттерн (Шаблон) Builder - 1
public class Good{
   public final int a;
   public final int b;
   public final int c;
   public final int d;
   public final int e;
   public final int f;
//Реализация Builder через статический внутренний класс
public static class Builder{
//Обязательные параметры
    public int a;
    public int b;
//Необязательные параметры со значениями по умолчанию
public int c = 0;
public int d = 0;
public int e = 0;
public int f = 0;
//Конструктор с обязательными параметрами
public Builder(int a, int b){
this.a=a;
this.b=b;
}
//Методы с возвращающим типом Builder для необязательного параметра с, d, e, f,
  public Builder c (int val) {
            c = val;
            return this;
        }
  public Builder d (int val) {
            d = val;
            return this;
        }
  public Builder e (int val) {
            e = val;
            return this;
        }
  public Builder f (int val) {
            f = val;
            return this;
        }
//Метод с возвращающим типом Good для генерации объекта
public Good buidl() {
            return new Good (this); }
private Good(Builder builder) {
        a = builder.a;
        b = builder.b;
        c = builder.c;
        d = builder.d;
        e = builder.e;
        f = builder.f;     }
Теперь в методе main при создании объекта вызывается конструктор статического класса Builder с обязательными параметрами. Затем через точку вызываются все необходимые необязательные параметры. В завершение вызывается метод buidl(); для генерации объекта.
Good good = new Good.Builder(40, 20)
        .c(2)
        .d(4)
        .e(23)
        .f(9)
        .buidl();
Если хочу создать объект с двумя обязательными и одним необязательным параметром, это будет выглядеть так:
Good good = new Good.Builder(40, 20)
        .c(2)
        .buidl();
Если хочу создать объект только с двумя обязательными параметрами, это выглядет так:
Good good = new Good.Builder(40, 20)
         .buidl();
Комментарии (19)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Intoxikot
Уровень 31
19 марта 2022, 17:34
Шикарная статья! Очень конкретно и с интересным примером
Александр Палеков process adjustment engine в vpkits
27 января 2021, 18:02
это всё хорошо, но приведенный пример кода не работает, ибо пропущены две скобки, закрывающие классы...
On Girame
Уровень 20
17 декабря 2020, 18:52
а пропущенные необязательные параметры будут тоже созданы с дефолтным значением?
fedyaka
Уровень 36
23 октября 2022, 07:37
да
On Girame
Уровень 20
17 декабря 2020, 18:46
а нельзя как с# уже сделать необязательные аргументы в конструкторе и методе?
Pavlo Buidenkov
Уровень 41
13 июня 2020, 07:57
статья ок, но не может не резать глаз 1. перекошенное форматирование кода (забыли выровнять код в своей IDE ) 2. слово в названии медода "build" с опечаткой "buidl"
Artem Murk
Уровень 35
20 октября 2018, 10:05
К сожалению данная статья не раскрывает полной красоты и функциональности данного шаблона. Не раскрыты также недостатки, описание очень скудное. Рекомендую автору погуглить и переделать статью. Что можно улучшить на первый взгляд. 1) привести пару реальных примеров где можно применить шаблон. Возможно есть примеры из уже существующих библиотек, вставить их. 2) описать преимущества и недостатки. 3) Передлать и дополнить назначение шаблона. Он в основном используется для конструирования сложных объектов.
Kupnu4
Уровень 26
16 октября 2018, 23:56
Интересный шаблон, классный пример. Теперь не надо создавать множество конструкторов и запоминать в каком конструкторе какой параметр за что отвечает.
Vania Kostiuk
Уровень 6
15 октября 2018, 22:10
Гарний шаблон. Все наглядно розписано.
Нина Можарская
Уровень 17
16 октября 2018, 22:38
и полезный
Mihail Tymoshenko
Уровень 0
14 октября 2018, 15:13
Хорошая статья. Отличный паттерн, очень понятное создание сложных объектов
Нина Можарская
Уровень 17
16 октября 2018, 22:38
Благодарю
Мария
Уровень 2
13 октября 2018, 22:01
Благодаря паттерну теперь не приходится заморачиваться и скролить, чтобы посмотреть и припомнить назначения параметров! Однозначно полезный шаблон, буду использовать!