Я пытался использовать для реализации стиля и рендеринга в моем небольшом инструментарии GUI, используя Factory Pattern, и затем эта безумная идея поразила меня. Почему бы не использовать шаблон фабрики для всех виджетов?
Прямо сейчас я думаю о чем-то в стиле:
Widget label = Widget::create("label", "Hello, World");
Widget byebtn = Widget::create("button", "Good Bye!");
byebtn.onEvent("click", &goodByeHandler);
Новые типы виджетов будут регистрироваться с помощью функции, подобной Widget::register(std::string ref, factfunc(*fact))
Что бы вы сказали о плюсах и минусах этого метода?
Я бы поставил на то, что при использовании std::map<std::string>
проблем с производительностью почти не возникает, поскольку он используется только при настройке.
И да, простите меня за то, что я был поврежден JavaScript и любыми возможными синтаксическими ошибками в моем C ++, поскольку это было довольно давно, с тех пор как я использовал этот язык.
Краткое изложение плюсов и минусов
Плюсы
- Было бы легко загружать новые виджеты динамически из файла
- Виджеты можно легко заменить во время выполнения (это также может помочь в модульном тестировании)
- Обращение к динамичным людям
Минусы (и возможные решения)
- Не проверено во время компиляции (Можно написать собственную проверку во время сборки. JS / Python / назвать его, также не проверяется во время компиляции; и я полагаю, что разработчики вполне нормально обходятся без него)
- Возможно, менее производительный (Не нужно создавать виджеты постоянно. Карты строк не будут использоваться все время , а скорее при создании виджета и регистрации обработчиков событий)
- Up / Downcasting hell (Обеспечьте обычное создание экземпляров класса, где это необходимо)
- Возможность усложнить настройку виджетов (параметры виджета могут быть одинаковыми)
Мой GUI Toolkit находится на ранних стадиях, ему не хватает довольно много на стороне планирования. И так как я не привык делать каркасы GUI, вероятно, есть много вопросов / design решений , которых у меня еще нет,
Прямо сейчас я не вижу, чтобы виджеты были бы слишком разными по своему набору методов, но, скорее всего, это было бы просто потому, что я еще не рассмотрел более продвинутые виджеты.
Спасибо всем за ваш вклад!