Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpStFc 87 of 113 menu
◀ ▶

Фабричный конструктор в Dart

Фабричный конструктор помечают словом factory. Он может вернуть новый объект, уже существующий экземпляр или значение подтипа. В теле используют только return - без списка инициализации и без this. Часто основной конструктор делают приватным, а снаружи оставляют понятные фабрики:

class Post { String title; Post._(this.title); factory Post.fromHome() { return Post._("/home/app/note.txt"); } factory Post.fromTemp() { return Post._("/tmp/note.txt"); } }

Создадим объект и выведем его:

var post = Post.fromHome(); print(post.title);

Запись Post.fromHome() читается как именованный способ получить объект. Приватный Post._ виден только в этом файле, поэтому создать запись иначе снаружи нельзя.

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

class Post { String title; Post._(this.title); factory Post.parseTitle(String raw) { var text = raw.trim(); if (text.isEmpty) { return Post._("draft"); } return Post._(text); } }

Создадим объект и выведем его:

print(Post.parseTitle(" note ").title); print(Post.parseTitle(" ").title);

Фабрика удобна и для коротких сценариев без отдельного типа. Именованный фабричный конструктор может вызвать другой конструктор того же класса:

class Post { String title; Post(this.title); Post.empty() : title = "draft"; factory Post.draft() { return Post.empty(); } }

Создадим объект и выведем его:

var post = Post.draft(); print(post.title);

Сделайте класс Employee с приватным конструктором и полем label типа String. Добавьте фабрики v1 и v2 со строками "1.0" и "2.0". Выведите текст из результата Employee.v2().

Сделайте класс Employee с приватным конструктором и полями from и to типа int. Добавьте фабрику of с двумя аргументами, которая записывает меньшее значение в from. Выведите Employee.of(10, 3).from.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить