Как правильно реализуется множество мелких классов со схожей функциональностью и одним родителем? Формулировка такого вопроса была не такой уж простой вещью.
Задача: есть некий числовой параметр, который необходимо форматировать множеством способов. Пользователю нужно предоставить выбор вида форматирования с выводом его названия.
Звучит запутано. Я пытался сделать один класс родитель, который реализует метод format($value).
И множество классов наследников, каждый из которых предлагает свою реализацию метода format и у которого есть поле для описания форматирования. Но столкнулся с проблемой автоматической загрузки всех этих классов (их будет два десятка, не меньше). И унификацией вызова метода форматирования.
Кейс: пользователь ввел число. Я должен вывести ему список всех способов форматирования, которые есть. Например:
1. Отрезать 1 символ впереди.
2. Умножить на 10.
и так далее.
При выборе метода он должен применяться к числу.
Подскажите, пожалуйста, наиболее оптимальное решение задачи.

21 Авг 2019 в 07:08
254 +1
0
Ответы
1

Для данной задачи вы можете использовать паттерн "Стратегия". Создайте интерфейс или абстрактный класс, который будет содержать метод format(). Затем создайте отдельные классы для каждого способа форматирования, реализующих этот интерфейс и переопределяющих метод format().

Для удобства использования и автоматической загрузки классов вы можете использовать автозагрузку классов с помощью функции spl_autoload_register(). Также вы можете использовать паттерн "Фабричный метод" для создания объектов нужного класса в зависимости от выбора пользователя.

Например, в коде это может выглядеть примерно так:

interface Formatter {
public function format($value);
}
class TrimFormatter implements Formatter {
public function format($value) {
return substr($value, 1);
}
}
class MultiplyFormatter implements Formatter {
public function format($value) {
return $value * 10;
}
}
// Фабричный метод для создания объекта нужного класса
class FormatterFactory {
public static function createFormatter($type) {
switch ($type) {
case 'trim':
return new TrimFormatter();
case 'multiply':
return new MultiplyFormatter();
// добавьте другие способы форматирования по мере необходимости
}
}
}
$value = 123;
$formattersTypes = ['trim', 'multiply']; // добавьте сюда другие способы форматирования
foreach ($formattersTypes as $type) {
$formatter = FormatterFactory::createFormatter($type);
echo $type . ': ' . $formatter->format($value) . PHP_EOL;
}

Этот код позволит вам создать множество классов для различных способов форматирования и легко добавлять новые способы, а также автоматически загружать эти классы при их использовании.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир