Страницы

Поиск по вопросам

понедельник, 20 мая 2019 г.

Стоит ли создавать новый класс для вариации алгоритма?

Есть класс А, который реализует некий алгоритм. На главной форме есть чекбокс, при отметке которого алгоритм выполняется с небольшими изменениями в логике. Также могут появиться еще много чекбоксов, которые по-немногу меняют логику алгоритма. Получается, для обработки всех чекбоксов в алгоритме класса А надо будет писать много условий, код усложняется как визуально, так и для понимания.
Или лучше создавать новые классы А2, А3 и т.д., которые "в чистом виде" будут реализовывать свои вариации алгоритма?


Ответ

На мой взгляд лучше создать новый класс под каждый алгоритм.
Т.е. вы создаете интерфейс допустим такой:
interface AlgoritmExecutor{ execute(); }
И для каждого класса алгоритмов его реализуете, и сам алгоритм пишите в нем. В этом случае при добавлении нового алгоритма Вам надо будет написать новый класс, а не лезть в старый, добавляя новые условия.
Но остается вопрос как выбирать нужный класс. Тут моё предложение не лучшее. Создать фабрику, которая будет принимать пачку boolean за каждый чекбокс.
class AlgoritmFactory{ static AlgoritmExecutor chooseAlgoritm(boolean... checkbox){ //тут исходя из включенных чекбоксов выбираете нужный класс алгоритма } }

Это удобно тем, что в слое вида вы обращаетесь к фабрике, передаете ей все чекбоксы и получаете выбранный алгоритм в виде интерфейса.
public void algoritmAction(){ AlgoritmExecutor algoritm = AlgoritmFactory(checkbox1.isEnabled(), checkbox2.isEnabled(), checkbox3.isEnabled()); algoritm.execute(); }
но фабрика становится не очень понятна для стороннего читателя из-за пачки булевых значений.

Комментариев нет:

Отправить комментарий