Патерн проектирования Фасад в 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 разобрали как организовать паттерн Фасад.