2015-12-08 15 views
1

Допустим, у меня есть следующий класс и строитель для него:Если Builder вычислять значения параметров

public class A(){ 
    private B b; 
    private C c; 

    private A(Builder builder) { 
     this.b = builder.b; 
     this.c = bulder.c; 
    } 

    public static class Builder() { 
     private B b; 
     private C c; 

     public Builder setB(B b){ 
      this.b = b; 
      return this; 
     } 

     public Builder setC(C c){ 
      this.C = c; 
      return this; 
     } 

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

Теперь давайте предположим, что Ь, с должны быть вычислены каким-то образом (например, на основе списка D). Вопрос:

Где указать параметры заполнения b и c на основе некоторых вычислений, то есть, следует ли размещать вычисления в A, в построителе или где-то еще?

+0

Это кажется странным использованием множителя для меня. Почему вы «A» берете строителя? Если 'b' и' c' не являются необязательными, тогда 'A' ​​должен потребовать их через конструктор. Строитель должен использоваться для установки необязательных (или настраиваемых) свойств 'A', я бы не передал построитель' A'. –

+0

Это не полный класс, это просто пример. Есть больше параметров, которые являются необязательными, поэтому строитель. Я нашел реализацию вроде этого как пример где-то, конструктор А является закрытым, так что я просто избегаю иметь большой конструктор, который будет иметь тот же орган, что и в этом случае, за исключением того, что параметры будут передаваться непосредственно вместо строителя. Если я передам параметры b и c через конструктор, я бы не нарушил концепцию строителя? Где я могу поместить другие параметры, которые являются необязательными? – Marko

+0

Если 'b' и' c' не являются необязательными, то строитель не дает никаких преимуществ, на самом деле он создает проблему, как то, что если я не называю 'setB'? Если они являются необязательными, просто создайте 'A' (в конструкторе построителя) и установите их на' A', когда вызывается метод builder. –

ответ

0

Я бы выбрал вариант, исходя из того, может ли быть найден список D после того, как A знает об этом. Если он может, то свойства должны быть в состоянии быть пересчитаны, поэтому должны сами делать расчет. Если D является фиксированным списком, который был присвоен A, тогда свойства могут быть «кэшированы» и подсчитаны спереди

Смежные вопросы