А вы попробуйте сами для начала сделать такой класс.
Смотрите, есть два варианта (базовых, вариантов конечно же больше):
Определяете интерфейсы для всех компонентов UI (Margin, Width, Measure и т.д.), делаете абстрактную фабрику, знания о платформе концентрируете в конкретных реализациях — получаете простой для сопровождения код, максимально абстрагированный от платформы
Убираете «лишние сущности» и оставляете только классы элементов, передавая в конструктор платформу. С таким подходом каждый отдельно взятый визуальный элемент должен знать о каждой платформе
А теперь возьмите вариант #2, и представьте, что вам необходимо добавить поддержку ещё одной платформы.
Я вас разочарую, но это именно абстрактная фабрика. Смотрите, например, вики. Это, конечно, похожие шаблоны, но абстрактная фабрика — это порождающий шаблон, а мост — структурный.
Абстрактные фабрики, на самом деле, далеко не везде нужны. Хороший пример в данной ситуации — это кроссплатформенный GUI framework, в котором вам необходимо создавать визуальные элементы (кнопки, поля ввода и т. д.) одинаковым образом независимо от платформы. То есть, у вас будет интерфейс по типу IVisualElementFactory с методами CreateButton, CreateTextBox и так далее, у которого будут реализации, например, WindowsVisualElementFactory и MacVisualElementFactory. Клиентский код получает из фреймворка уже готовый экземпляр IVisualElementFactory и конструирует свой визуальный интерфейс, не требуя знания о платформе.
Если вы не разрабатываете подобные программные системы — такие шаблоны вам без надобности.
Всё же зависит, как вы правильно говорите, от движка. В .Net, например, используется недетерминированный конечный автомат, чтобы обеспечить поддержку хотя бы backtracking. Если вы используете backtracking (и другие расширения базового синтаксиса regex), производительность будет оставлять желать лучшего, я уверен.
Если говорить о HTML, то далеко не всегда у вас на входе будет полностью валидная разметка.
Бывало, конечно, и такое, что приходилось делать анализ, например, списка объявлений переменных на Pascal/C/C# при помощи регулярного выражения (сыну маминой подруги в университете задавали), но это максимум хорошая задача для того, чтобы прокачаться в регулярных выражениях. В реальных проектах почему-то мне всегда гораздо проще сделать отдельно простой лексер (из кучи маленьких и понятных регулярок) и уже отдельно анализировать синтаксис рекурсивным спуском или табличными парсерами.
Очень странно, я тоже клиент Альфа банка, в моём случае всё прямо противоположно — крайне быстро и удобно, никаких данных вбивать не приходилось ни разу.
Это всё конечно здорово, надеюсь, когда-нибудь прогресс дойдёт и до корректного отображения баланса на карте в тех случаях, когда выполняется списание не через приложение (обслуживание, онлайн покупки) — сейчас для того, чтобы увидеть изменённый баланс, необходим перезапуск.
Простите, но отношение периметра шестиугольника к длине описанной вокруг него окружности никак не может быть равно пи. Для правильного шестиугольника радиус описанной окружности равен длине его стороны. Таким образом, получаем периметр = 6*R, длина описанной окружности = 2*pi*R ≈ 6.28*R, ваше отношение равно 6/6.28 ≈ 0.955.
мета- и не только данные можно собирать с серверов
Возможно, но, например, когда разгребаю краши — максимум, что могу узнать о пользователе, это страна и версия ОС. Я сильно сомневаюсь, что такое могло пройти мимо разработчиков. Конечно, инопланетяне-жидорептилоиды могли промыть всем мозги и нас всех обманывают (включая меня), но так недалеко и до чайника, вращающегося вокруг солнца, не так ли?
Нормальные люди делают это с помощью аутентификации
Как же мы раньше жили без этой, безусловно, ценной информации. Вообще то, о чём я говорю, называется «аутентификация по device hash». Ну есть такая бизнесовая фича — link up to 5 devices, и по ряду причин гораздо удобнее делать именно так. А у вас позиция «не читал, но критикую», ай-яй-яй.
Статья выглядит как антиреклама AnchorFree, фу-фу-фу. Я своими руками переписывал Betternet в 2018 году и с полной ответственностью могу заявить, что как минимум версия для Windows не собирает и не собирала никакой истории браузера, как и любой другой пользовательской информации. Минимальная информация о системе собирается и хэшируется на стороне клиента — чтобы отличить устройства с премиум от free, это обычная практика для любого условно-бесплатного приложения, но это всё.
Смотрите, есть два варианта (базовых, вариантов конечно же больше):
А теперь возьмите вариант #2, и представьте, что вам необходимо добавить поддержку ещё одной платформы.
Если вы не разрабатываете подобные программные системы — такие шаблоны вам без надобности.
Бывало, конечно, и такое, что приходилось делать анализ, например, списка объявлений переменных на Pascal/C/C# при помощи регулярного выражения (сыну маминой подруги в университете задавали), но это максимум хорошая задача для того, чтобы прокачаться в регулярных выражениях. В реальных проектах почему-то мне всегда гораздо проще сделать отдельно простой лексер (из кучи маленьких и понятных регулярок) и уже отдельно анализировать синтаксис рекурсивным спуском или табличными парсерами.
Возможно, но, например, когда разгребаю краши — максимум, что могу узнать о пользователе, это страна и версия ОС. Я сильно сомневаюсь, что такое могло пройти мимо разработчиков. Конечно, инопланетяне-жидорептилоиды могли промыть всем мозги и нас всех обманывают (включая меня), но так недалеко и до чайника, вращающегося вокруг солнца, не так ли?
Как же мы раньше жили без этой, безусловно, ценной информации. Вообще то, о чём я говорю, называется «аутентификация по device hash». Ну есть такая бизнесовая фича — link up to 5 devices, и по ряду причин гораздо удобнее делать именно так. А у вас позиция «не читал, но критикую», ай-яй-яй.