1

Class heirarchy
Клиент использует их с помощью базового класса (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 бы получить только значения requiredFeature с карты и возвращает экземпляр. Это похоже на метод, который был бы статичным в производном классе, но тогда клиент не может создавать экземпляры производного класса с существующим объектом. Есть ли более элегантный способ написать это? или у этого есть некоторая применимая модель?

ответ

0

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

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

Посмотрите на этот пост SE:

Passing Properties to Factory method

+0

Обязательные/необязательные функции варьируются от одного производного класса к другому, поэтому я не вижу, как это помогает – shrewquest

+0

Базовый класс содержит все параметры. Соответствующие производные классы задают требуемые параметры. Даже вам не нужен производный класс, если вы не переопределяете поведение базового класса. –

0

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

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

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

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

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