Что я хочу знать:
Должна ли каждая отдельная операция, представленная в списке в фоновом абзаце, быть одной командой? Что делают отдельные команды?
Справочная информация:
Мне нужно написать программу, которая запускается из cmd и выполняет операции со строкой, которую вы можете ввести в качестве аргумента командной строки. Вы также должны передать операции, которые будут выполнены как CLA.
Например: myprogram.exe / es "Это строка" / ds / rs.
Es = ввод строки, ds = отображение строки, rs = обратная строка.
Нет необходимости реализовывать Undo / Redo.
Возможные операции:
• Введите строку
• Показать строку
• Обратная строка
• Усилить все буквы
• Строчные все буквы
• Прописные буквы
• Строчные буквы
• Устранить последовательные дубликаты
• Повернуть влево
• Повернуть вправо
• Кодировка длин серий
• Декодирование по длине прогона
• Бросить каждый n-й символ
• Разделить на строки и взять сначала
• Разделить на строки и взять последний
Что я делал / каков мой подход:
После некоторых исследований я осознал, что оптимальным способом реализации этого примера было бы использование Командного шаблона и Цепочки ответственности. Я читаю книгу, написанную «Бандой четырех»: «Шаблоны проектирования».
Но я думаю, что не совсем понимаю концепцию. Я знаю, что с помощью шаблона команд есть: Invoker, Receiver, Command, CommandInterface и т. Д. Я знаю, что Invoker (здесь мой класс ProgramHandler.cs) генерирует отдельные команды, оснащает их получателем и действием. И единственная команда вызывает получателя для выполнения действия. Получатель - это класс с именем StringManipulator, который содержит все методы для работы со строкой. Моя идея также заключается в том, что синтаксический анализатор анализирует CLA и «сообщает» ProgramHandler, какие команды необходимо создать.
(Пожалуйста, посмотрите на мой первый подход к дизайну, картинка в конце!)
Но:
Дополнительные вопросы:
Не слишком ли сложно из-за наличия абстрактного класса SimpleCommand, который содержит получатель и действие, а затем конкретные команды наследуются от SimpleCommand?
Это кажется немного неправильным, но с другой стороны: каждая команда нуждается в действии и получателе, поэтому предоставление каждой конкретной команде этих полей по отдельности противоречит «правилам» объектно-ориентированного программирования.
Как это правильно спроектировано?
Диаграмма классов
Диаграмма классов
Спасибо за ваше время и помощь!
С наилучшими пожеланиями!