Патерн проектирования Фасад в Dart/Flutter

от автора

Определение в википедии

Шаблон фасад (англ. Facade) — структурный шаблон проектирования, позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.

Шаблон проектирования - Фасад

Шаблон проектирования — Фасад

«Приёмы объектно-ориентированного проектирования. Па́ттерны проектирования» (англ. Design Patterns: Elements of Reusable Object-Oriented Software) — книга 1994 года о программной инженерии, описывающая шаблоны проектирования программного обеспечения. Авторами книги, которых прозвали «Бандой четырёх», являются Эрих ГаммаРичард ХелмРальф Джонсон  (англ.)рус.Джон Влиссидес

Теперь мы знаем официальные определение паттерна Фасад и давайте реализуем его на языке Dart.

Создаём класс с конструктором для наших данных, называться он будет Plane

class Plane {   final String model;   final int numberOfPassangers;   final bool isCommerce;    const Plane({     required this.model,     required this.numberOfPassangers,     required this.isCommerce,   }); }

Потом создаём необходимые интерфейсы. У нас будет 2 интерфейса и по 2 метода в каждом.

interface class IGetPlane {   void getListPlane() {}   void saveToFile() {} }
interface class IExport {   void exportToExel() {}   void exportToWord() {} }

Теперь создаём реализацию наших интерфейсов.

class ExportImpl implements IExport {   final Plane plane;   const ExportImpl({required this.plane});    @override   void exportToExel() {     print('Экспорт в Эксель ${plane.model}');   }    @override   void exportToWord() {     print('Экспорт в Ворд');   } }

Не будем нагружать код реальными методами, а просто будем выводить что-то в консоль.

class GetPlaneImpl implements IGetPlane {   @override   void getListPlane() {     print('получить список самолетов');   }    @override   void saveToFile() {     print('Сохранение в файл');   } }

А теперь мы создадим класс Facade, в который мы прокинем данные для наших методов и сделаем инстансы наших классов (ExportImpl и GetPlaneImpl) и сделаем единственный метод run, который будет запускать методы в наших 2х дочерних классах.

class Facade {   final Plane plane;   Facade(this.plane);    late ExportImpl export = ExportImpl(plane: plane);   final getPLANE = GetPlaneImpl();    void run() {     print(plane.model);     getPLANE.getListPlane();     export.exportToExel();   } }

Давайте теперь перейдём в main. Создаём наш самолёт с необходимыми данными. Делаем инстанс класса Фасад и вызываем метод run, который объединил в себе вызов внутренних методов других классов.

void main() {   Plane plane = const Plane(     model: 'Cesna 172',     numberOfPassangers: 4,     isCommerce: false,   );    Facade(plane).run(); }

Давайте запустим и посмотрим, что из этого выйдет!

Вывод в консоль

Вывод в консоль

Ну что же поздравляю, всё работает! Итак, мы с помощью языка Dart разобрали как организовать паттерн Фасад.


ссылка на оригинал статьи https://habr.com/ru/articles/784840/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *