Существует ли шаблон проектирования для создания прототипа, в котором различаются только некоторые значения?

Иерархия классов
Клиент использует их через базовый класс (код Java):

BaseClass baseObj1 = new DerivedClass("valueofreqdfeature");
//the required feature gets added to the map in the base class
Map<String, Object> features = Collections.singletonMap("requiredFeature1Name","requiredFeatureValue");
BaseClass newBaseObj = baseObj1.createNewConcreteFeature(features);

createNewConcreteFeature получит только требуемые значения Feature из карты и вернет экземпляр. Это похоже на метод, который был бы статическим в производном классе, но тогда клиент не может создавать экземпляры производного класса с существующим объектом. Есть ли более элегантный способ написать это? или у этого есть какой-то применимый шаблон?


person shrewquest    schedule 21.01.2016    source источник


Ответы (2)


Вы нарушаете принцип единой ответственности SOLID. Функции должны выполнять только одну работу. Другой класс, такой как Builder или что-то в этом роде, должен выполнять другую работу — создавать ваши функции. Если вам нужно создать функцию на основе других функций, используйте что-то вроде этого:

builder.SetValues("valueofreqdfeature");
IFeature someFeature = builder.CreateFeature();

builder.UseFeature(someFeature);
IFeature newFeature = builder.CreateFeature();

Идя таким образом, вам не нужно менять код в ваших миллиардах функций, если требуются некоторые изменения в отношениях между ними. Единственное место, которое вам нужно изменить, это ваш класс строителя. А также работать с интерфейсами

person Dzianis Yafimau    schedule 21.01.2016

Вы можете использовать Builder_pattern.

Объявите только один класс CustomerFeatures со всеми обязательными и необязательными параметрами. Установите свойства по мере необходимости.

Взгляните на этот пост SE:

Передача свойств методу Factory

person Ravindra babu    schedule 21.01.2016
comment
обязательные/необязательные функции варьируются от одного производного класса к другому, поэтому я не понимаю, как это помогает - person shrewquest; 21.01.2016
comment
Базовый класс содержит все параметры. Соответствующие производные классы устанавливают необходимые параметры. Даже вам не нужен производный класс, если вы не переопределяете поведение базового класса. - person Ravindra babu; 21.01.2016