Найти тему
Ржавый код

Дизайнерские шаблоны в Rust - фасад скрывающий сложный мир

Вступление

Шаблон фасада используется как способ скрыть более сложную логику. Фасад может выполнять следующее:

  • Улучшить удобство использования библиотеки или API за счет маскировки взаимодействия с более сложными компонентами базового кода.
  • Предоставить интерфейсы, зависящие от контекста. Это означает, что каждый клиент API может получить свой собственный фасад, в зависимости от вариантов использования.

Шаблон фасада обычно используется в следующих случаях:

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

На что это похоже? Что ж, это довольно просто:

-2

Класс `Facade` имеет простой интерфейс, скрывающий тот факт, что он может иметь более сложное взаимодействие, например, с `ClassA` и `ClassB`. Этот пример простой, но вы можете себе представить, что в сложных системах существуют десятки или сотни классов, с которыми должен взаимодействовать фасад.

Реализация в Rust

В пустом каталоге откройте свой терминал или командную строку и введите:

-3

Теперь откройте этот каталог в вашей любимой IDE и откройте main.rs файл в вашем каталоге src/.

Мы начнем с определения точечной структуры:

-4

Точка просто получает две координаты, `X` и `Y`. Я также добавил простой конструктор.

Структура `ShapeMaker` поможет нам построить квадрат:

-5

Структура `ShapeMaker` просто получает отправную точку. Он вычисляет вторую точку квадрата в методе `create_square()`, добавляя параметр `size` как к координатам `X`, так и `Y` точки.

Структура `ShapeMeasurer` измеряет расстояние между двумя точками, используя теорему Пифогора:

-6

Наконец, у нас есть измеритель площади, который, исходя из начальной точки и заданного размера, может измерить диагональ квадрата:

-7

Теперь мы можем это проверить:

-8

Строка за строкой:

  1. Мы создаем новую точку и передаем ее в `SquareMeasurer`.
  2. Вызывая метод `measure_square_diagonal()`, `SquareMeasurer` вызывает базовые классы, чтобы найти размер диагонали.
  3. Мы выводим результат. В нашем тестовом примере это должно быть около 4.2.

Вывод

Это не самый сложный шаблон для реализации. Как и в случае с большинством шаблонов проектирования, это просто выглядит как здравый смысл, скрывающий сложность. В следующей статье я надеюсь предоставить вам более сложный пример для этого шаблона.

Статья на list-site.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц