Пустая реализация методов класса

129
10 октября 2021, 08:20

у меня есть 3 класса ObjectTypeA, ObjectTypeB, ObjectTypeC, моя задача вычислить скорость. У этих классов скорость зависит от разных наборов параметров, например у ObjectTypeA скорость зависит от параметров height, viscosity (вязкость) и lenght у ObjectTypeB скорость зависит от параметров height и lenght у ObjectTypeC скорость зависит от параметров height, lenght, density (плотность) и startFlow ( стартовый расход)

Кроме того скорость в каждого объекта зависит от скорости которую ему передал соединенный с ним объект, причем все три типа объектов ObjectTypeA, ObjectTypeB, ObjectTypeC могут соединяться друг с другом (механизм соединения тут не принципиален)

Я хочу сделать строитель с помощью которого можно построить объекты любого класса из трех, для этого я хочу сделать интерфейс

public interface ConstructedObject {
 void setLength(long length);
 void setHeight(long height);
 void setViscosity (double viscosity);
 void setDensity (double density);
 void setStartFlow (double startFlow);
 void build();
}

Соответственно сделать строители каждого объекта реализующие этот интерфейс чтобы мне потом не привязываться к конкретным классам строителей а привязываться к интерфейсу, как то так:

 public class ObjectBuilder(){
    public ConstructedObject  CreateObjectTypeA(){
       return new ContructObjectTypeA()   
      }
   }
   //Use in main code
ObjectBuilder objBuilder= new ObjectBuilder();
ConstructedObject cObj=objBuilder.CreateObjectTypeA()
cObj.setLength(5);
cObj.build();

Но при таком подходе при создании ObjectTypeA у меня будет пустая реализация методов void setViscosity (double viscosity); void setDensity (double density); void setStartFlow (double startFlow); ну и соответственно для других объектов будут встречаться пустые реализации методов. В связи с этим вопрос, является ли такой подход допустимым? С одной стороны неправильно вызывать метод setViscosity там где он не имеет смысла и если добавится еще один объект с новым свойством, которое добавится в интерфейс придется переписывать все классы реализующие этот интерфейс, с другой стороны получается более жесткая привязанность к конкретным классам.

Я не могу представить как пересмотреть данную архитектуру, т.к. в рамках задачи объекты ObjectTypeA, ObjectTypeB, ObjectTypeC связываются друг с другом внутри другого объекта ObjectCalculateVelocity и по сути своей для него они все одинаковы, т.к. предоставляют ему метод getVelocity() из интерфейса CalculatedVelocity.

READ ALSO
Как проверять значения в базе данных

Как проверять значения в базе данных

Я обрабатываю Post запрос с Json данными, как мне их добавлять в базу данных, чтобы была проверка, которая узнавала, есть ли в базе данных уже этот...

112
Windows API CreateFile

Windows API CreateFile

Как мне узнать существует ли такой файл, которому обращается программа или он занят другой программой? CreateFile возвращает только -1В CreateFile...

299
C++ MinGW-w64 WinAPI: как заполнить ComboBox строками

C++ MinGW-w64 WinAPI: как заполнить ComboBox строками

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

95
Найти '1' в числе

Найти '1' в числе

Возможно только через математическое выражение определить, есть ли в числе единица?

107