169 похожих чатов

Есть такая задачка: что-то думаю как сделать, и никак не

могу додуматься.
Есть множество классов, которые производят некие расчеты. На вход им идут разные входные параметры, на выходе также разные данные. Все эти классы реализуют один интерфейс. метод выглядит так:
/**
* @param array<mixed> $params
*
* @return array<mixed>|int|float|string|null
*/
public function calculate(array $params);
Хочу заменить вход / выход на интерфейсы. С возвращаемым значением все просто - интерфейс возвращаемых данных можно сделать, и любое кол-во реализаций. метод интерфейса калькулятора будет возвращать интерфейс например CalculationResultInterface, каждый конкретный калькулятор возвращает какую-то конкретную реализацию этого интерфейса. А вот со входными данными сложнее... разные классы принимают разные данные. Если создать интерфейс входных данных например CalculationInputInterface, и метод заставить принимать его, то все реализации тоже должны будут принимать этот интерфейс, т.к. сужать тип аргумента нельзя. а надо. как это лучше сделать? пытаюсь придумать фабрику. Класс калькулятора возвращает фабрику, фабрика возвращает данные под конкретный калькулятор. Нужно чтобы в классе был абстрактный метод calculate, который принимал бы в каждом конкретном калькуляторе свой класс входных параметров.
т.е. класс обязан реализовать этот метод, при этом класс должен сам определять, какие данные ему нужны. вот как это сделать?

1 ответов

22 просмотра

Т.е. у тебя цепочка обработки данных?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта