Рефакторинг для использования шаблона Builder или шаблона конструктора Telescoping

Согласно действующему Java 2ed , элемент 2

шаблон конструктора телескопирования , в который вы предоставляете конструктору с только необходимые параметры, другой с одним необязательным параметром, третий с двумя необязательными параметрами, и так далее, что завершится конструктор со всеми необязательными параметры.

Пример конструкторов класса, применяющего этот шаблон, заимствован из Когда вы будете использовать шаблон Builder?

кодовый набор 1a

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

размер - это обязательный параметр . сыр, пепперони и бекон являются необязательными параметрами. Предположим, я хотел бы предоставить конструктор, как показано ниже.

кодовый набор 1b

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

Другой пример - это

кодовый набор 2

public AttributeKey(String key, Class clazz)
public AttributeKey(String key, Class clazz) 
public AttributeKey(String key, Class clazz, @Nullable T defaultValue, boolean isNullValueAllowed)
public AttributeKey(String key, Class clazz, @Nullable T defaultValue, boolean isNullValueAllowed, @Nullable ResourceBundleUtil labels)

два последних примера , которые я дал не не соответствует характеристикам телескопического конструктора , как кодовый набор 1a

  1. Включены ли кодовые наборы 1b и 2 в телескопический конструктор? если нет, то как это называется?
  2. По сравнению с использованием шаблона Builder, какой из них (между Builder и шаблоном из кодового набора 1a, 2) обеспечивает больше преимуществ

10
задан Community 23 May 2017 в 12:08
поделиться