Как правильно реализуется множество мелких классов со схожей функциональностью и одним родителем?
Формулировка такого вопроса была не такой уж простой вещью.
Задача: есть некий числовой параметр, который необходимо форматировать множеством способов. Пользователю нужно предоставить выбор вида форматирования с выводом его названия.
Звучит запутано. Я пытался сделать один класс родитель, который реализует метод format($value).
И множество классов наследников, каждый из которых предлагает свою реализацию метода format и у которого есть поле для описания форматирования. Но столкнулся с проблемой автоматической загрузки всех этих классов (их будет два десятка, не меньше). И унификацией вызова метода форматирования.
Кейс: пользователь ввел число. Я должен вывести ему список всех способов форматирования, которые есть. Например:
1. Отрезать 1 символ впереди.
2. Умножить на 10.
и так далее.
При выборе метода он должен применяться к числу.
Подскажите, пожалуйста, наиболее оптимальное решение задачи.
class NumberManager
{
/**
* Форматирование чисел
* @param integer $number Число
* @param string $formatClass Класс для форматирования
* @param array $formatClassParams Параметры для класса форматирования
* return bool
*/
public function format($number, $formatClass, $formatClassParams = [])
{
// Создаём экземляр класса для форматирования
$formatClassName = $formatClass . 'Format';
if (!class_exists($formatClassName)) {
return false;
}
$formatter = new $formatClass();
// Передаём этому классу число, параметры форматирования и получаем результат
return $formatter->formatNumber($number, $formatClassParams);
}
}
Спасибо за готовый код, но эта реализация плоха тем, что при добавлении класса форматирования нужно добавить эти данные еще и в этот класс. Хочется какой-то автономности от класса-родителя. Разделение логики.