Дизайн паттерндер. 3-сабақ. Құру паттерндері (Creational patterns)

Блог аты abzalkalimbetov
Аты: Builder (Құрылысшы)
Проблема: Классқа жазбалар қосылған сайын конструкторлар тізімінің өсуі (экспоненнті). Жазбалардың өсуі олардың қатарын есте сақтауды қиындатады. Мысалы:

Pizza(int size) {… }
Pizza(int size, boolean cheese) {… }
Pizza(int size, boolean cheese, boolean pepperoni) {… }
Pizza(int size, boolean cheese, boolean pepperoni, boolean bacon) {… }

Шешім:Басқа бір объектті, құрылысшыны, қолдану арқылы класс объектісін құру. Құрылысшы әр параметерді біртіндеп алып инициализация жасап құрастырылған объектіні қайтарады.

public class Pizza {
  private int size;
  private boolean cheese;
  private boolean pepperoni;
  private boolean bacon;

  public static class Builder {
    //міндетті параметр
    private final int size;

    //қосымша параметр
    private boolean cheese = false;
    private boolean pepperoni = false;
    private boolean bacon = false;

    public Builder(int size) {
      this.size = size;
    }

    public Builder cheese(boolean value) {
      cheese = value;
      return this;
    }

    public Builder pepperoni(boolean value) {
      pepperoni = value;
      return this;
    }

    public Builder bacon(boolean value) {
      bacon = value;
      return this;
    }

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

  private Pizza(Builder builder) {
    size = builder.size;
    cheese = builder.cheese;
    pepperoni = builder.pepperoni;
    bacon = builder.bacon;
  }
}


Қолданылуы:

Pizza pizza = new Pizza.Builder(12)
                       .cheese(true)
                       .pepperoni(true)
                       .bacon(true)
                       .build();


Нәтиже: Құрылысшы кодты жазуды, оқуды және түсінуді жеңілдетеді.
P.S: Сіздің класыңызда 4-5 параметерден көп болған жағдайларда ғана Құрылысшы паттерні сізге пайдалы болады.

0 пікір

Тек қана тіркелген және авторизациядан өткен қолданушылар пікір қалдыра алады.